none
Ошибка открытия файла Word из-за длинного полного имени файла

    Вопрос

  • Windows XP и 7, Visual Studio 10 и 12. В программе на C# при открытии файла doc
    doc = word.Documents.Open(ref filename, ref confConv, ref readOnly);
    возникает ошибка из-за длинного полного имени файла (более 255 знаков). К сожалению, изменить имя файла я не могу, пользователи засовывают свои файлы в глубокие директории и в имени файла пишут еще и пояснения. Добавление в начало имени файла \\?\ привело к тому, что строки перестали находится в файлах, которые раньше находились. С короткими именами тоже у меня не получилось, наверное, что-то делаю неправильно. Проект и архив с директориями, имитирующий длинные имена файлов, разместил соответственно по ссылкам https://yadi.sk/d/NAENs0k13VgdBw и 
    https://yadi.sk/d/qGDPtYrp3VgbpT

    Alex

Ответы

  • Если Word Automation не поддерживает длинные имена файлов, с этим ничего не поделать. Добавка \\? позволяет использовать длинные имена при передаче строк в юникодные функции файлового API, но если сама библиотека обрезает его до 255 символов или использует ANSI функции вместо юникодных, толку от этого нет. К слову, длинные имена файлов не поддерживают и стандартные классы для работы с файлами .NET Framework вплоть до версии 4.6.2, да и сам проводник в Win7 падает на некоторых действиях с ними. Про XP и говорить не приходится.

    Придумайте обходной путь, копируйте файл во временную папку с коротким именем (пользуясь напрямую функциями WinAPI), либо расшаривайте длинную папку в сеть, так что можно будет работать с коротким UNC-путем.


Все ответы

  • Если Word Automation не поддерживает длинные имена файлов, с этим ничего не поделать. Добавка \\? позволяет использовать длинные имена при передаче строк в юникодные функции файлового API, но если сама библиотека обрезает его до 255 символов или использует ANSI функции вместо юникодных, толку от этого нет. К слову, длинные имена файлов не поддерживают и стандартные классы для работы с файлами .NET Framework вплоть до версии 4.6.2, да и сам проводник в Win7 падает на некоторых действиях с ними. Про XP и говорить не приходится.

    Придумайте обходной путь, копируйте файл во временную папку с коротким именем (пользуясь напрямую функциями WinAPI), либо расшаривайте длинную папку в сеть, так что можно будет работать с коротким UNC-путем.


  • Спасибо, понял.

    Alex