当文件夹或文件名包含空格时的参数长度问题

3
我已经在Windows中注册了文件关联,以便打开特定文件类型的应用程序,这样当用户双击文件时,它会在我的应用程序exe上打开。
我从参数中接收文件路径并打开它。但是,当文件夹或文件名包含空格(有时多个空格)时,参数长度大于1,我不知道如何将它们解析为单个文件路径。由于Windows将这些传递给我的应用程序exe,因此我无法控制传递的参数。
示例文件路径:C:\ Sample 1 \ file 1.rtf
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

任何建议都将不胜感激,谢谢。
2个回答

2

你需要用引号将文件名括起来。

applicationname.exe "C:\Sample 1\file 1.rtf"

谢谢,但这并不适用于我的问题。是窗口传递参数而不是另一个程序。John在上面给出了正确的解决方案。 - user10887644

2

在传递参数之前,您应该先引用该参数:

myapplication.exe "C:\Sample 1\file 1.rtf"

如果我们查看 Visual Studio 的 .sln 文件关联,可以在注册表项 HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\Open\Command 中找到。在该关联中,文件名被引用:

"C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\VSLauncher.exe" "%1"

您与程序的关联应该做到同样的效果。或者,您可以将参数合并为单个字符串:

var path = string.Join(string.Empty, args);

这种方法不够灵活,尤其是当你需要传递多个参数时。

你在注册表值中使用双引号的第二个选项是正确的解决方案。第一个解决方案对我来说不适用,因为是Windows传递参数,我不能使用最后一个解决方案,因为它会删除空格并使文件路径无效。非常感谢您的答复。 - user10887644

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接