Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Ошибка открытия файла из-за длинного полного имени файла

Ответить
Настройки темы
.NET - Ошибка открытия файла из-за длинного полного имени файла

Старожил


Сообщения: 230
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 23:38, 28-04-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата tumanovalex:
есть ли какие-либо способы обойти ограничение Windows на полное имя файла? »
Naming Files, Paths, and Namespaces (Windows)
c# - How to deal with files with a name longer than 259 characters? - Stack Overflow

1. Попробовать использовать префикс «\\?\» в пути.
2. Попробовать перевести длинное имя в короткое формата 8.3 и использовать его (если это допустимо по сценарию).

Что из этого сработает — наверняка сказать не могу. Смотрите, пробуйте.

Отправлено: 00:19, 29-04-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 230
Благодарности: 2

Профиль | Отправить PM | Цитировать


Спасибо большое за ответ. Попробую.

Отправлено: 10:44, 05-05-2018 | #3


Старожил


Сообщения: 230
Благодарности: 2

Профиль | Отправить PM | Цитировать


К сожалению, не получилось решить проблему с длинными именами. Добавление в начало имени файла \\?\ привело к тому, что строки перестали находится в файлах, которые раньше находились. С короткими именами тоже у меня не получилось, наверное, что-то делаю неправильно. Прикрепил проект и архив с директориями, имитирующий длинные имена файлов.

Последний раз редактировалось tumanovalex, 15-05-2021 в 22:37.


Отправлено: 19:48, 10-05-2018 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


tumanovalex, как я понимаю, Вы пытаетесь работать с Word посредством Automation, и именно там происходит затык/падение при попытке открытия файла с длинным путём, так?

Отправлено: 21:33, 10-05-2018 | #5


Старожил


Сообщения: 230
Благодарности: 2

Профиль | Отправить PM | Цитировать


Именно так

Отправлено: 17:25, 12-05-2018 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Тогда, насколько я понимаю, увы и ах. С префиксом \\?\ отказываются работать и .Net, и Microsoft Office (по крайней мере, имеющийся у меня 2003-й). И там, и там действует ограничение по MAX_PATH - 1.

С короткими же именами происходит следующее: экземпляр сервера Automation создаётся, документ по указанному «короткому» (8.3) пути открывается, а затем рушится установленная связь клиент Automation — сервер Automation, приложение-клиент Automation падает с ошибкой времени исполнения, а сервер Automation, в данном случае, Microsoft Word, с открытым в нём документом остаётся без видимых окон «висеть» процессом на заднем плане. Короткий пример на VB.Net:
Скрытый текст
Код: Выделить весь код
Module Module1

    Sub Main()
        Dim strLongFilePath As String = "C:\Мои проекты\0156\!!! Длинное имя файла\1111111111 1111111111 1111111111 1111111111 1111111111\2222222222 2222222222 2222222222 2222222222 2222222222\3333333333 3333333333 3333333333 3333333333 3333333333\4444444444 4444444444\01234567890123456789012345678901234567890123456789\444_Объединенные ячейки 11111.doc"
        Dim str83FilePath As String

        Dim objFSO As New Scripting.FileSystemObject

        Dim objWord As New Microsoft.Office.Interop.Word.Application
        Dim objDocument As Microsoft.Office.Interop.Word.Document


        str83FilePath = (objFSO.GetFile("\\?\" & strLongFilePath).ShortPath()).Replace("\\?\", "")

        Console.WriteLine("Long path:      " & strLongFilePath.Length & vbTab & "[" & strLongFilePath & "]")
        Console.WriteLine("Short 8.3 path: " & str83FilePath.Length & vbTab & "[" & str83FilePath & "]")

        With objWord
            .Visible = True
            objDocument = .Documents.Open(str83FilePath)
            objDocument.Close()
            .Quit()
        End With

        objWord = Nothing
        objFSO = Nothing
    End Sub

End Module

Возможно, конечно, что это просто у меня пальцы кривые.

Можно ещё, конечно, поиграться с точками повторной обработки, создавая связь каталогов или символическую ссылку на родительскую для документа папку где-нибудь в пути покороче, а затем обращаясь именно через эту новосозданную связь или ссылку к искомому файлу.

Отправлено: 23:26, 12-05-2018 | #7


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


tumanovalex, разбить filename на путь и имя файла, поменять рабочий каталог, открыть документ по имени без пути?

Отправлено: 15:52, 13-05-2018 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Busla, я пробовал и так делать. Что .Net, что Microsoft Word радостно обламываются с той же самой ошибкой чересчур длинного пути.

Отправлено: 23:21, 13-05-2018 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Ошибка открытия файла из-за длинного полного имени файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Синтаксическая ошибка в имени файла, имени папки или метке тома Maestro Deno Microsoft Windows 7 8 05-03-2017 19:21
Доступ - Синтаксическая ошибка в имени файла, имени папки или метке тома Maestro Deno Microsoft Windows 7 1 05-03-2017 16:18
2007 - ошибка открытия файла \'eb\'e5\'e4... stranges Microsoft Office (Word, Excel, Outlook и т.д.) 5 24-04-2012 19:46
CMD/BAT - Прога полного уничтожения (обнуление и т.п.)  из bat файла Sleaper Скриптовые языки администрирования Windows 9 02-12-2011 16:10
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58




 
Переход