[英]parse Main Args[] string from windows context menu
我使用以下代码来实现由我的应用程序打开的右键单击文件。 我的目标是将该文件的路径放入我的程序中。
我用:
public static string path = "";
static void Main(string[] args)
{
if (args.Length > 0)
{
path = args[0];
}
}
然后我使用变量path
,它是应用程序通过上下文菜单打开的文件。
当文件名不包含任何空格时,导入文件路径没有任何问题。 但是当文件名包含任何空格时,除了它之外显示的文件名除去了文件名中第一个空格之后的字母。
fileName.pdf
→ fileName.pdf
fileName blah blah.pdf
→ filename
第二个示例显示包含空格的文件未按原样导入。
因此,如果有任何想法如何解析包含空格的文件而其名称没有任何问题。
这是因为操作系统会尝试为您拆分命令行参数,但如果您不在正确的位置放置引号,则可能会出错。 默认情况下,以下命令行
MyConsoleApp.exe FileName blah blah.pdf
将导致args
包含3个字符串FileName
, blah
和blah.pdf
(由空格分隔)
例如,解决此问题的最常见解决方案是在调用应用程序时用引号括起参数
MyConsoleApp.exe "FileName blah blah.pdf"
这将导致args
长度为1,第一个字符串的值为FileName blah blah.pdf
(操作系统删除了额外的引号)。
另一种方法是使用Environment.CommandLine属性获取用于调用应用程序的完整未解析命令行,并手动解析该字符串。 这为您提供了更大的灵活性(因为在使用传递给Main的args
参数时,并不总是能够识别参数是否被引号括起来),但是更省力 - 您应该确保在启动应用程序时使用引号。
有人发布了一个完美的答案,但是在我提出它之前将其删除并使其成为正确的答案。
答案是我必须将“%1”更改为“%0”并且它有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.