|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Ошибка открытия файла из-за длинного полного имени файла |
|
.NET - Ошибка открытия файла из-за длинного полного имени файла
|
Старожил Сообщения: 249 |
Windows XP и 7, Visual Studio 10 и 12. В программе на C# при открытии файла doc
возникает ошибка из-за длинного полного имени файла (более 255 знаков). К сожалению, изменить имя файла я не могу, пользователи засовывают свои файлы в глубокие директории и в имени файла пишут еще и пояснения. Подскажите, пожалуйста, есть ли какие-либо способы обойти ограничение Windows на полное имя файла?
|
|
Отправлено: 23:38, 28-04-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата tumanovalex:
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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 249
|
Профиль | Отправить PM | Цитировать Спасибо большое за ответ. Попробую.
|
Отправлено: 10:44, 05-05-2018 | #3 |
Старожил Сообщения: 249
|
Профиль | Отправить PM | Цитировать К сожалению, не получилось решить проблему с длинными именами. Добавление в начало имени файла \\?\ привело к тому, что строки перестали находится в файлах, которые раньше находились. С короткими именами тоже у меня не получилось, наверное, что-то делаю неправильно. Прикрепил проект и архив с директориями, имитирующий длинные имена файлов.
|
Последний раз редактировалось tumanovalex, 15-05-2021 в 22:37. Отправлено: 19:48, 10-05-2018 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать tumanovalex, как я понимаю, Вы пытаетесь работать с Word посредством Automation, и именно там происходит затык/падение при попытке открытия файла с длинным путём, так?
|
|
Отправлено: 21:33, 10-05-2018 | #5 |
Старожил Сообщения: 249
|
Профиль | Отправить PM | Цитировать Именно так
|
Отправлено: 17:25, 12-05-2018 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать tumanovalex, разбить filename на путь и имя файла, поменять рабочий каталог, открыть документ по имени без пути?
|
Отправлено: 15:52, 13-05-2018 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Busla, я пробовал и так делать. Что .Net, что Microsoft Word радостно обламываются с той же самой ошибкой чересчур длинного пути.
|
Отправлено: 23:21, 13-05-2018 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Синтаксическая ошибка в имени файла, имени папки или метке тома | 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 |
|