2015-11-20 82 views
0

我想從C#應用程序作爲參數傳遞一個網絡共享與空間文件傳遞單詞。我已經搜索過,只能找到帶有空格的文件的工作示例,只在本地存儲空間,而不是網絡共享。Process.Start與網絡共享和空間

我有唯一的成功的網絡共享映射到一個字母,如:

Process.Start("WINWORD.EXE", "\"k:\\coordinacion de apoyo a usuarios\\informes\\2015\\2015-10\\informe octubre 2015.docx\""); 

但下面不工作:

Process.Start("WINWORD.EXE", "\"\\mar-fp01\\mar_tecnologia$\\coordinacion de apoyo a usuarios\\informes\\2015\\2015-10\\informe octubre 2015.docx\""); 

(K:映射到\ mar- FP01 \ mar_tecnologia $)

而且,我不想硬碼的位置,因爲在現實中,我從得到的文件名:

SaveFileDialog archivo = new SaveFileDialog(); 
archivo.FileName = "informe "+ months.GetValue(month - 1) + " " + year; 
archivo.InitialDirectory = @"\\mar-fp01\mar_tecnologia$\Coordinacion de Apoyo a Usuarios\Informes\" + year + "\\" + year + "-" + monthYear[0].PadLeft(2, '0'); 

因此,一個適當的解決方案應採取archivo.FileName並做一個最小的轉換爲它的值,以確保Process.Start工作。我曾嘗試使用@分隔符,ProcessStartInfo及其參數屬性,並沒有組合我嘗試過。這個問題應該可以幫助任何人在網絡共享空間中混淆文件。

+0

在使用UNC路徑時,服務器名稱前應該有一個雙反斜槓。 ''\\\\ mar-fp01 \\ ...'還能更好嗎? –

+0

http://stackoverflow.com/questions/952721/problems-launching-a-process-with-process-start-how-do-i-construct-the-argum/952852#952852 –

+0

@Damien_The_Unbeliever是的,它的工作和那幫助我找到解決方案,我只需在archivo.fileName之前和之後添加引號。看到編輯的問題。謝謝! – fjleon

回答

0

解決的辦法是:

Process.Start("WINWORD.EXE", "\""+archivo.FileName+"\""); 

哪裏檔案館是如下SaveFileDialog的實例:

SaveFileDialog archivo = new SaveFileDialog(); 
archivo.Filter = "Archivos .docx (*.docx)|*.docx|Todos los archivos (*.*)|*.*"; 
archivo.FileName = "filename with spaces"; 
archivo.InitialDirectory = @"\\server\share$\folder with spaces\another folder"; 

的InitialDirectory屬性應該同@前面,以確保正確的轉義完成。