C # Microsoft.Office.Interop.Word не может открыть путь с пробелами - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь использовать Microsoft.Office.Interop.Word, чтобы открывать и восстанавливать документы MS Word, но всякий раз, когда он сталкивается с путем с пробелами, он выходит из строя , даже если я вставляю кавычки вокруг строки, используя

"\"" + string + "\""

или что-то в этом роде.Скопируйте и вставьте точный путь, который он выводит после «Обработки», в мой терминал, откроет PDF в моей программе по умолчанию, так что я знаю, что путь хорош и что обычная оболочка CMD может открыть его.Полная ошибка выглядит следующим образом:

Processing "C:/Users/me/Documents/DocTesting/!Fine.pdf"
Saving as "C:/Users/me/Documents/DocTesting/!Fine.docx"
Time elapsed: 00:00:01.1499644
Processing "C:/Users/me/Documents/DocTesting/!Not Okay.pdf"
 (C:\//Users/me/Documents/DocTesting...) (0x800A1436): Sorry, we couldn't find your file. Was it moved, renamed, or deleted?
at Microsoft.Office.Interop.Word.Documents.Open(Object& FileName, Object& ConfirmConversions, Object& ReadOnly, Object& AddToRecentFiles, Object& PasswordDocument, Object& PasswordTemplate, Object& Revert, Object& WritePasswordDocument, Object& WritePasswordTemplate, Object& Format, Object& Encoding, Object& Visible, Object& OpenAndRepair, Object& DocumentDirection, Object& NoEncodingDialog, Object& XMLTransform)
   at Testing.DocumentConverter.convDoc(String filename, String inPath, String outPath)
Unhandled Exception: System.Runtime.InteropServices.COMException: The object invoked has disconnected from its clients. (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))
   at Microsoft.Office.Interop.Word.DocumentClass.get_Application()
   at Testing.DocumentConverter.convDoc(String filename, String inPath, String outPath)
   at Testing.Program.Main(String[] args)

, а код, вызвавший ошибку, выглядит следующим образом:

string docstring = "\"" + inPath + filename + "\"";
Console.WriteLine("Processing {0}", docstring);
doc = wordApp.Documents.Open(docstring, (object)false, ref readOnly, 
ref missing, ref  missing, ref missing, ref missing, 
ref missing, ref missing, ref missing, ref missing, 
(object)isVisible,ref missing, ref missing, ref missing, ref missing);

ВЫКЛЮЧЕНИЕ В WINDOWS ВЫ ЛУЧШЕ С ВАМИ ИСПОЛЬЗУЕТСЯВЗАИМОДЕЙСТВУЙ С СЛОМ, ТО ЭТО ДОЛЖНО БЫТЬ \\

1 Ответ

0 голосов
/ 10 октября 2018

Используйте Path.GetFullPath () в имени файла, который вы создаете, чтобы получить правильное полное имя файла с \ в качестве разделителя каталогов.Ваша проблема в том, что / работает при вызове Windows API, но не работает в командной строке.Это командный процессор, который использует / в качестве параметра командной строки.

Вам также следует использовать Path.Combine (), чтобы объединить каждую часть создаваемого вами пути.Вы можете быть правы с конкатенацией строк, но если это не так, это нарушит ее.

Documents.Open () отлично работает с именами файлов с пробелами в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...