Как я могу использовать класс FileInfo, избегая PathTooLongException?

Существует много способов, которыми можно сделать это. Вот два:

  1. можно открыть файл ISO с помощью менеджера архива (щелчок правой кнопкой по файлу, и выбор Открывают With Archive Manager ). Пакеты в pool каталог.

  2. Используя терминал, можно ввести эту команду:

    sudo mount -o loop,ro "/path/to/the/image.iso" "/path/to/the/mount/point"
    

    "/path/to/the/image.iso" местоположение Вашего файла ISO, в то время как "/path/to/the/mount/point" местоположение пустого каталога. После выдачи команды Вы найдете файлы ISO в том каталоге. Снова, пакеты внутренние pool.

Примечание, что pool каталог содержит некоторые базовые пакеты. Другие пакеты не поставляются в CD, ни ни в какой установке (потому что это удвоило бы размер это).

13
задан PeeHaa 3 November 2013 в 17:45
поделиться

2 ответа

Насколько я знаю, это нелегко. Хотя можно использовать обходной путь для потоков, как упоминалось в Phoenix, это невозможно для обработки имен файлов. Внутри каждый класс, который работает с именами файлов, выполняет проверку длинных имен файлов.

Вы можете создать экземпляр FileInfo и заполнить частные члены с помощью отражения (однако это не рекомендуется) и получить FileInfo, указывающий на файл с длинным путем. Но когда вы попытаетесь использовать этот объект, вы все равно получите исключения PathTooLongException, потому что, например, Класс пути (активно используемый FileInfo) проверяет наличие длинного пути при каждом вызове метода.

Итак, есть только один правильный способ получить беспроблемную поддержку длинного пути - реализовать собственный набор классов, которые будут имитировать поведение FileInfo. Это не очень сложно (возможно, только безопасность), но требует много времени.

Обновление: Вот даже два готовых решения этой проблемы: AlpfaFS и Zeta Long Paths

8
ответ дан 1 December 2019 в 23:48
поделиться

Здесь, на работе, мы довольно часто сталкиваемся с длинными путями, и поэтому нам пришлось в основном откатывать наш собственный System.IO, чтобы сделать это. Ну, не совсем, но мы переписали File, Directory, FileInfo, DirectoryInfo и Path и это лишь некоторые из них. Основная предпосылка заключается в том, что все это возможно с точки зрения Win32 API, поэтому все, что вам действительно нужно сделать в конце дня, - это вызвать Unicode-версии функций Win32 API, и тогда все будет хорошо. Это большая работа, и временами это может быть головной болью, но лучшего способа сделать это на самом деле нет.

7
ответ дан 1 December 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: