Как заставить максимальную длину пути содержать более 260 символов
Всем привет,
У меня проблема с экономией. Мне нужно знать, какой путь длиннее 260 символов (к сожалению, они должны быть такими длинными. Это не моя идея!)
Я нашел вот это:
[^]
Я попробовал\\?\, но это не сработало.
Мой путь таков:"\\? \D:\Temp1\Data\"
В этом случае Visual Studio говорит, что существует неизвестная escape-последовательность.
Тогда я попробовал @"\\? \D:\Temp1\Data"
Visual Studio говорит, что есть знак, который не разрешен. Я думаю, что это"?"
И когда я пытаюсь сделать это без\\?\, есть исключение windows, которое говорит, что путь допускает только 260 символов.
Какую ошибку я совершил?
Надеюсь, вы сможете мне помочь.
С уважением
Ричард
Что я уже пробовал:
Эти ссылки:
https://blogs.msdn.microsoft.com/bclteam/2007/03/26/long-paths-in-net-part-2-of-3-long-path-workarounds-kim-hamilton/
https://msdn.microsoft.com/en-us/library/aa365247.aspx
Member 12599256
"\ \ ? "означает имя компьютера. Пример: \ \ server1\publicshare
файл примера.Удалить(@"D:\Temp1\Data\file1.txt"):
Evosoul04
В Примере MSDN говорится, что я должен использовать\\?\, когда у меня есть путь длиной более 260 символов. Или я ошибаюсь здесь? https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath
Dave Kreskowiak
Если вы пытаетесь использовать классы и методы, встроенные в систему .NET Framework.Пространство имен Io, с которым они не будут работать дольше, чем с обычными файловыми путями.
Вы должны делать то, что вы связали, и писать свои собственные методы для обработки основных файловых операций.
Не видя вашего кода, невозможно сказать вам, что вы сделали не так.
johannesnestler
Я проверил точный код из примера блога OP linked - он не работал, даже с вызовами PInvoke вместо System.IO...
Dave Kreskowiak
Я не могу проверить это прямо сейчас. У меня еще нет VS, установленного после перестройки системы, и у меня нет времени.
0x01AA
При использовании PInvoke, вы убедитесь в том, чтобы использовать Юникод ("ж") версии?
Благоговение Разработчиков:
Windows NT: вы можете использовать пути длиннее символов MAX_PATH, вызывая широкую (W) версию CreateFile и добавляя к пути"\\?\". "\ \ ? \ "Указывает функции Отключить синтаксический анализ пути. Это позволяет использовать пути длиной почти 32 000 символов Юникода. Вы должны использовать полностью квалифицированные пути с этой техникой. Это также работает с UNC-именами. "\ \ ? \ "Игнорируется как часть пути. Например, "\\?\C:\myworld\private" считается "C:\myworld\private" и "\\?\UNC-пути\tom_1\hotstuff\coolapps" рассматривается как "\\tom_1\hotstuff\coolapps".
Richard MacCutchan
Пример кода работает так, как задокументировано.
Richard Deeming
Вместо того чтобы пытаться написать код самостоятельно, почему бы не использовать предварительно построенную библиотеку, чтобы сделать эту работу за вас:
Зета Длинные Пути[^] Уве Кейма существует уже почти семь лет и, кажется, работает хорошо.
Кроме того, измените требования таким образом, чтобы вы не попробуйте разбить окна! :)
Richard MacCutchan
Смотрите мое решение ниже, ничего не сломано.