我有一个小安装程序,它将一些.exe和DLL安装到目标计算机上,并在注册表中设置一个键,以便在右键单击Excel文件时,用户会看到一个新的上下文菜单项。此命令键的值类似于:
[TARGETDIR] myexecutable.exe%1
%1 有效将文件名传递给 args [0] 中的可执行文件。我希望这能给我的.exe完整路径。但它给了我某种压缩路径。例如:
C:\ Documents and Settings \ user \ Desktop \ teestqqqq.xls
它会给我:
C:\ DOCUME〜1 \用户\桌面\ TEEST〜1.XLS
对我来说这是个问题。我怎么解决这个问题?我需要一条适当的完整路径。
更新:根据评论和答案中的要求,这对我来说是一个问题,因为从我收到的路径中我得到了一些新的文件夹名称。某些用户稍后将提交这些文件夹名称以便SVN存储库。我注意到在我的用户的某些机器上,.exe接收排序路径,而在另一台机器上接收长路径。我的用户认为文件夹名称是"唯一的"用于SVN上的DIFF目的。我只需要一种方法来确保文件夹名称的唯一性(我认为在撰写本文时我已经在下面的答案中找到了所需内容)
答案 0 :(得分:3)
将%1
替换为"%1"
,即加上引号,您将获得长文件名。问题是'文档和设置'在其名称中有空格,无法在没有引号的情况下正确传递给您的程序。这就是为什么shell将路径转换为短名称,没有空格,然后将其传递给您的程序。
答案 1 :(得分:2)
尝试
Path.GetFullPath(path)
应该这样做。但是你应该能够使用短路径。
答案 2 :(得分:1)
你可以尝试:
string shortName = @"C:\DOCUME~1\user\Desktop\TEEST~1.XLS";
string longName = System.IO.Path.GetFullPath(shortName);
答案 3 :(得分:1)
在“长文件名”之前很久。 MS DOS中的文件名限制为8个字符,后跟一个点,最多3个字符用于扩展名。您看到的是具有长文件名的路径的简短版本。这是一个较长的解释:http://www.computerhope.com/issues/ch000209.htm
现在解释给定路径如何为您解决问题?因为Windows API也应该能够使用短文件名版本。
正如ken2k所提到的,System.IO.Path.GetFullPath(..)
将返回给定短文件名路径的扩展路径。
引用文档:
如果传入短文件名,则会扩展为长文件名。