【发布时间】:2015-03-28 05:11:21
【问题描述】:
我注意到我的程序有一个非常奇怪的问题。当我尝试从位于与 C 不同驱动器的资源管理器中打开文件时,我的程序收到的参数是一团糟!
这是一个例子:
如果我想在资源管理器窗口中打开文件“E:\Downloads\This song has whitespaces in its name.mp3”(双击文件),命令行参数数组将如下所示:
string[] args = Environment.GetCommandLineArgs();
- E:\下载\
- 这个
- 歌曲
- 有
- 空格
- 在
- 它的
- 姓名
- .mp3
而不是将整个内容放在一个数组条目中。 我已经为此挠头了一段时间了。但我不明白为什么会这样。 有谁知道修复? 谢谢。
编辑:
更详细地解释发生了什么:
我打开了一个资源管理器窗口,我尝试双击应该启动我的程序的文件,并将该文件添加为命令行参数。
如果文件包含空格“”,我的程序启动时收到的参数就是我之前写的 - 路径在每个空格处分割。
我的程序订阅了 WPF 事件“已加载”,我只是尝试获取一个数组
string[] args = Environment.GetCommandLineArgs();
【问题讨论】:
-
展示如何注册程序以打开文件可能是个好主意...正如 sora0419 指出的那样,您可能在某处缺少引号...
-
我猜
located in a different drive than C不是这个问题的必要先决条件。 -
@kennyzx 奇怪的是,只有当我尝试打开位于 C 驱动器之外的文件时才会发生这种情况。
-
有趣,不过,请关注Best Practices for File Associations-
Always Wrap Expanding Strings in Quotation Marks。如果您在注册表中执行此操作,Explorer 可以完成正确的工作。 -
@kynnyzx 这似乎可以解决我的问题。我将编辑我注册程序的方式并回复你们,希望有一个可行的解决方案。
标签: c# wpf command-line-arguments