【问题标题】:GetCommandLineArgs Returns incorrect path from network location with spacesGetCommandLineArgs 从带有空格的网络位置返回不正确的路径
【发布时间】:2017-02-05 07:08:13
【问题描述】:

我有一个面条刮刀

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

它在字母驱动器上的本地文件上运行良好,但是当我针对包含空格的网络地址运行它时,我遇到了问题。

即"\\server\test 文件夹\filename.txt"

如果没有空格,它似乎会返回正确的路径。如果目录或文件名中有空格,则该组件会变成乱码。

示例图片:

Path with spaces
\\192.168.0.200\Web\1K5SXZ~6\T5MSMN~1.TXT

Path without spaces
\\192.168.0.200\Web\testdirectory\testfile.txt

使用的代码:

string[] args = Environment.GetCommandLineArgs();

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

有什么想法吗?

谢谢 E

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    myapp.exe \foo bar\baz

    可以解释为\foo 和\bar\baz(2 个参数,因为有一个空格)而不是(预期的)\foo bar\baz;通常你只是用引号括住路径以防止这种情况:

    myapp.exe "\foo bar\baz"

    我猜 explorer 只是采用 safe(r) 路线* 并简单地使用 8.3 filename 无论如何都不会包含空格,因此不需要引号。

    更多信息请见here;如果你想要LFN(长文件名),很容易找回它:

    string[] args = Environment.GetCommandLineArgs();
    
    foreach (string a in args)
    {
        MessageBox.Show(new FileInfo(a).FullName);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多