我的问题很独特,我找不到任何解决方案。
我有一个处理命令行参数的WinForms程序(它被集成到上下文菜单中,并使用其打开的目录名称进行调用)。它像魅力一样工作。调用如下:myprogram.exe '%1'
- 其中%1
是目录名称。
我尝试使用相同的方法创建WPF应用程序:集成到上下文菜单中,具有相同的签名。 (myWPFprogram.exe '%1'
),使用Environment.GetCommandlineArguments()
。
程序开头有一个目录存在检查。在WinForms程序中,它从未被触发(因为它是从我点击的目录运行的,所以它应该是奇怪的不存在)。通过我的WPF程序,我总是收到消息:
发生错误:提供的目录('d:\ workbench \ dialogs')不存在。
我点击了该目录,因此它已存在。
其他奇怪的事情是,如果目录名称中有空格,它会像旧DOS时一样被“截断”:
发生错误:提供的目录('d:\ workbe~1 \ testsp~1')不存在。
如何从WPF命令行获取正确的目录名?我的方法有什么问题?
答案 0 :(得分:1)
问题在于您将参数括在单引号中。这不起作用,程序收到的参数实际上类似'd:\workbench\dialogs'
(注意单引号)。
如果要解决此问题,请使用双引号。它们被认可,您将要收到的论点如下:d:\workbench\dialogs
。我不知道为什么这适用于你的WinForms应用程序,因为它应该表现完全相同。
长名称转换为短名称的事实可能是出于兼容性目的而不应该打扰你。这两个版本的路径应该同样合适。如果要获取路径的正常版本,可以使用Path.GetFullPath()
。