Я работаю над приложением, которое просматривает каждый файл в некоторых каталогах и выполняет некоторые действия с этими файлами. В частности, я должен получить размер файла и дату, когда этот файл был изменен.
Некоторые полные имена файлов (каталог + имя файла) слишком длинны, я не мог использовать .NET Framework FileInfo
, который ограничен MAX_PATH
(260 символов). Многие веб-источники советуют использовать собственные функции Win32 через P/Invoke для доступа к файлам, чьи имена слишком длинны.
В настоящее время точно такая же проблема возникает с функциями Win32. Например, GetFileAttributesEx
(kernel32.dll) терпит неудачу с ошибкой Win32 3 ERROR_PATH_NOT_FOUND для пути 270 байт.
Тот же файл можно успешно открыть из Notepad2 и успешно отобразить с помощью проводника Windows (но Visual Studio 2010, к примеру, не может открыть его из-за ограничения 259 символов¹).
Что я могу сделать, чтобы иметь доступ к файлу, когда путь к файлу составляет 270 символов?
Примечания:
-
Удаление или игнорирование файлов с длиной пути к файлу длиной более 259 символов не является решением.
-
Я ищу только для Unicode-совместимых решений.
-
Приложение будет работать под управлением Windows 2008/Vista или более поздней версии с установленной .NET Framework 4.
¹ Удивительно, что Microsoft Word 2007 терпит неудачу, заявив, что "гибкий диск слишком мал" на компьютере, у которого нет гибкого диска, или что "оперативная память низкая", когда есть 4 ГБ ОЗУ осталось или, наконец, что "антивирусное программное обеспечение [...] нуждается в обновлении". Неужели они однажды остановят отображение таких глупо бессмысленных ошибок, по крайней мере, в таких ключевых продуктах, как Microsoft Office?