【问题标题】:Commandline-arguments from Explorer splitted at every whitespace来自 Explorer 的命令行参数在每个空格处拆分
【发布时间】:2015-03-28 05:11:21
【问题描述】:

我注意到我的程序有一个非常奇怪的问题。当我尝试从位于与 C 不同驱动器的资源管理器中打开文件时,我的程序收到的参数是一团糟!

这是一个例子:

如果我想在资源管理器窗口中打开文件“E:\Downloads\This song has whitespaces in its name.mp3”(双击文件),命令行参数数组将如下所示:

string[] args = Environment.GetCommandLineArgs();
  1. E:\下载\
  2. 这个
  3. 歌曲
  4. 空格
  5. 它的
  6. 姓名
  7. .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


【解决方案1】:

命令行参数由空格分隔,这就是为什么当您只将该字符串作为参数放入时,它将被解析为多个参数。 你应该使用引号来处理它。

当您传入命令行参数时,将整个文件名放在引号中。

【讨论】:

  • 是的。这个我知道。但是为什么资源管理器(您单击文件的窗口)没有给出用引号括起来的参数,这导致了这个问题?
  • @Tokfrans 这就是 Environment.GetCommandLineArgs();有效,它按空格解析您的命令行参数,并且输出与预期的一样。您可能想详细说明您做了什么以及您想要做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 2015-02-05
  • 2014-05-22
  • 2017-06-18
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多