Сначала программа валилась на получении списка фалов через Directory.GetFiles
с PathTooLongException
.
Почитал и нашел информацию, о том, что ограничение сняли в последних фреймворках.
Хорошо, сменил версию, но теперь при создании FileStream вылетает System.IO.DirectoryNotFoundException
.
с таким стеком:
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) в MD5Calculator.Program.Main(String[] args) в E:\Projects!My Projects\MD5Calculator\MD5Calculator\Program.cs:строка 36
Проверил валидность пути путем открытия файла и он успешно открылся.
Получается FileStream
не поддерживает длинные пути?
Как уйти от этого?
UPD
Минимальный код:
var filePath = @"\\?\"+Path.Combine(fileList.Key, list[i].FileName);
using (var stream = new FileStream(filePath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite))
{
}
Добавление @"\\?\"
поменяло исключение на
System.IO.IOException: 'Синтаксическая ошибка в имени файла, имени папки или метке тома
Может быть с шарой такое не работает?
Вот еще пример пути, который вызывает проблему и я немного обфуцировал звездочками:
\\******\********\*******\*******************\****************\******\********** *********\image0000015B0000018B0000027B0000041B0000042B0000046B0000099B0000303B0000363B0000380B0000484B0000563B0000569B0000958B0000959B0000972B0001164B0000025B0000050B0000149A.jpg
Для использования длинных сетевых путей к ним добавляется префикс \\?\UNC\
. См. Naming Files, Paths, and Namespaces
А почему майки могли побоятся заложить эту логику внутрь, что бы внутри все функции сами при необходимости выполняли дополнение?
Главным образом, из-за обратной совместимости. Вероятно, какие-то программы могут повести себя странно, если просто так отменить это ограничение. На самом деле, в Windows 10 есть возможность использовать длинные пути без префикса, но для этого нужно задать несколько настроек, как на уровне ОС так и в манифесте приложения: .NET 4.6.2 and long paths on Windows 10.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Одной кнопкой я создаю динамические массивы, введя их количество во второй текстбокс
Вчера работал над проектом, всё было нормальноСегодня при попытке скачать строку со страницы вылетает исключение
Можно ли посмотреть с помощью Telegram API время когда пользователь telegram был в сети последний раз? А то есть такие у которых включена last seen privacy...
При добавлении новых классов-таблиц в DbContext выдает ошибку и приходиться удалять базу и заново запускать проект