Использование длинных путей (>260) с.net 4.6.2 в службе Windows
У меня есть код, который начал выдавать исключение: TooLongPathException. Поэтому я провел некоторое исследование и обнаружил, что.net 4.6.2 решает эту проблему. Большой!
Неудачный код - это код, который перемещает и копирует папки в разные папки. Я хотел бы использовать.net 4.6.2 framework, чтобы этот код использовал более длинные пути, поэтому мне не нужно кодировать какое-то обходное решение.
Я установил.net 4.6.2 Framework на машине. Машина работает под управлением Windows Server 2008 R2 SP1. Я сделал проект целевой 4.6.2 фреймворк, но все равно он выдает эту ошибку.
Я не уверен, что мне здесь не хватает.
Кто-нибудь использовал.net 4.6.2 для аналогичной вещи, которая может указать мне, что мне нужно делать?
1 ответ
После миллиона тестов я могу подтвердить, что это работает с.Net 4.6.2 на Windows10, но не работает на Server 2012r2.
Когда я хочу удалить длинную папку, которую я создал с помощью Windows10 на общем ресурсе, Сервер не может удалить ее. Мой обходной путь - старомодная Робокопия.
public static void DirectoryDeleteRobocopy(string a_strPath)
{
_log.Debug("DirectoryDeleteRobocopy called: " + a_strPath);
string strTmpDir = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var emptyDirectory = new DirectoryInfo(strTmpDir + "\\TempEmptyDir_" + Guid.NewGuid());
try
{
emptyDirectory.Create();
using (var process = new Process())
{
process.StartInfo.FileName = "robocopy.exe";
process.StartInfo.Arguments = "\"" + emptyDirectory.FullName + "\" \"" + a_strPath + "\" /e /purge";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();
process.WaitForExit();
}
emptyDirectory.Delete();
new DirectoryInfo(a_strPath).Attributes = FileAttributes.Normal;
Directory.Delete(a_strPath);
}
catch (IOException) { }
}
Я думаю, что Microsoft должна сделать политику "Включить длинные пути Win32" доступной для Server 2012 (и, возможно, даже 2008) как можно скорее. Извините, но сейчас это выглядит плохо.