Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.252.23] |
|
Сообщ.
#1
,
|
|
|
Windows XP и 7, Visual Studio 10 и 12. В программе на C# при открытии файла doc
doc = word.Documents.Open(ref filename, ref confConv, ref readOnly); |
Сообщ.
#2
,
|
|
|
tumanovalex, а если попробовать обойти это ограничение? Скопировать исходный файл в другую директорию (чтобы имя стало короче). Обработать и поместить обратно.
|
Сообщ.
#3
,
|
|
|
Добавь к имени UNC префикс "\\?\D:\very long path"
|
Сообщ.
#4
,
|
|
|
Попробуйте извлечь короткие пути к каждой подпапке и конкретно к файлу. Получится путь с гарантированной длинной
[DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern int GetShortPathName([MarshalAs(UnmanagedType.LPTStr)] string path, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath, int shortPathLength); |
Сообщ.
#5
,
|
|
|
Спасибо большое за ответы. Попробую.
|
Сообщ.
#6
,
|
|
|
К сожалению, не получилось решить проблему с длинными именами. Добавление в начало имени файла \\?\ привело к тому, что строки перестали находится в файлах, которые раньше находились. С короткими именами тоже у меня не получилось, наверное, что-то делаю неправильно. Прикрепил проект. Архив с директориями, имитирующий длинные имена файлов, разместил по ссылке https://yadi.sk/d/qGDPtYrp3VgbpT (не получилось прикрепить к теме из-за большого размера - 358 кб).
|
Сообщ.
#7
,
|
|
|
Цитата tumanovalex @ С короткими именами тоже у меня не получилось, наверное, что-то делаю неправильно. Что именно не получилось? using System; using System.Runtime.InteropServices; using System.Text; namespace Sources { public class Program { const int MAX_PATH = 255; [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern int GetShortPathName([MarshalAs(UnmanagedType.LPTStr)] string path, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath, int shortPathLength); private static string GetShortPath(string path) { var shortPath = new StringBuilder(MAX_PATH); GetShortPathName(path, shortPath, MAX_PATH); return shortPath.ToString(); } static void Main(string[] args) { string test = GetShortPath(@"D:\m\!!! Длинное имя файла\1111111111 1111111111 1111111111 1111111111 1111111111\2222222222 2222222222 2222222222 2222222222 2222222222\3333333333 3333333333 3333333333 3333333333 3333333333\4444444444 4444444444\444_Объединенные ячейки 11111.doc"); Console.WriteLine(test); Console.ReadKey(); } } } |
Сообщ.
#8
,
|
|
|
Спасибо большое, VisualProg, с Вашим кодом все получилось. Видимо, я неправильно использовал функцию GetShortPathName.
|