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 с его свойством Arguments, и никакая комбинация, которую я пробовал, не работает. Этот вопрос должен помочь всем, кому приходится возиться с файлами с пробелами в сетевых ресурсах.


person fjleon    schedule 20.11.2015    source источник
comment
При работе с путями UNC перед именем сервера должна быть двойная обратная косая черта. "\"\\\\mar-fp01\\... работает лучше?   -  person Damien_The_Unbeliever    schedule 20.11.2015
comment
stackoverflow.com/questions/952721/   -  person Dave Cluderay    schedule 20.11.2015
comment
@Damien_The_Unbeliever да, это сработало, и это помогло мне найти решение, мне просто нужно было добавить кавычки до и после archivo.fileName. Смотрите отредактированный вопрос. Спасибо!   -  person fjleon    schedule 20.11.2015


Ответы (1)


Решение:

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

Где archivo является экземпляром 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 должен предшествовать @, чтобы обеспечить правильное экранирование.

person fjleon    schedule 20.11.2015