C# GetCommandLineArgs从网络位置返回不正确的带有空格的路径

C# GetCommandLineArgs从网络位置返回不正确的带有空格的路径,c#,C#,我有一个刮面器 我想从命令行参数中获取一个文件名-使用上下文菜单(右键单击)调用该程序并调用,为此将其添加到注册表等 它适用于字母驱动器上的本地文件,但是当我在包含空格的网络地址上运行它时,我遇到了一个问题 i、 e.“\\server\test folder\filename.txt” 如果没有空格,它似乎返回正确的路径。如果目录或文件名中有空格,则会将该组件转换为jibberish 示例图像: \\192.168.0.200\Web\1K5SXZ~6\T5MSMN~1.TXT \\192

我有一个刮面器

我想从命令行参数中获取一个文件名-使用上下文菜单(右键单击)调用该程序并调用,为此将其添加到注册表等

它适用于字母驱动器上的本地文件,但是当我在包含空格的网络地址上运行它时,我遇到了一个问题

i、 e.“\\server\test folder\filename.txt”

如果没有空格,它似乎返回正确的路径。如果目录或文件名中有空格,则会将该组件转换为jibberish

示例图像:


\\192.168.0.200\Web\1K5SXZ~6\T5MSMN~1.TXT


\\192.168.0.200\Web\testdirectory\testfile.txt

使用的代码:

string[] args = Environment.GetCommandLineArgs();

foreach (string a in args)
{
    MessageBox.Show(a);
}
有什么想法吗

Thx
发生这种情况的原因是,如果使用带空格的参数调用可执行文件,您将无法区分它是2个参数还是1个参数:

myapp.exe\foo-bar\baz

可以解释为
\foo
\bar\baz
(两个参数,因为有空格),而不是(预期的)
\foo bar\baz
;通常,您只是用引号将路径括起来,以防止出现这种情况:

myapp.exe“\foo-bar\baz”

我猜资源管理器只是采用了安全(r)路线*并简单地使用了不会包含空格的,因此不需要引号

看更多;如果您想要(长文件名),很容易将其取回:

string[] args = Environment.GetCommandLineArgs();

foreach (string a in args)
{
    MessageBox.Show(new FileInfo(a).FullName);
}

*其实,;我认为,也许explorer这样做是因为它无法知道是否正在调用“LFN感知”应用程序。但这只是我的猜测(没有经过深思熟虑)