Process.Start 与网络共享和空间

Posted

技术标签:

【中文标题】Process.Start 与网络共享和空间【英文标题】:Process.Start with network share AND spaces 【发布时间】:2015-11-20 13:27:27 【问题描述】:

我正在尝试从一个 C# 应用程序开始单词,该应用程序作为参数传递一个位于网络共享上的带有空格的文件。我已经搜索并且只能在本地存储上找到带有空格的文件的工作示例,而不是在网络共享上。

我只成功将网络共享映射到一个字母,例如:

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 能够正常工作。我尝试过使用@定界符,也尝试过使用带有 Arguments 属性的 ProcessStartInfo,但我尝试过的任何组合都不起作用。这个问题应该可以帮助任何不得不在网络共享上处理带有空格的文件的人。

【问题讨论】:

在使用 UNC 路径时,服务器名称前应该有一个双反斜杠。 "\"\\\\mar-fp01\\... 工作得更好吗? ***.com/questions/952721/… @Damien_The_Unbeliever 是的,它起作用了,这帮助我找到了解决方案,我只需要在archivo.fileName 之前和之后添加引号。请参阅已编辑的问题。谢谢! 【参考方案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 属性应以@ 开头,以确保正确转义。

【讨论】:

以上是关于Process.Start 与网络共享和空间的主要内容,如果未能解决你的问题,请参考以下文章

在指定网络名字空间执行命令

linux--nfs 网络文件共享

[Paper Weekly]CNN采样方法:空间变换网络(STN)与可变形卷积网络(DCN)

网络运维——访问共享的三种方式

Python-网络编程之线程与进程

2021年中职网络空间安全最新国赛赛题解析仅代表自己的建议——zz-网络安全试题解析