Sta*_*wan 1 c# file double-click
我写了一个ac#program,并将它与文件扩展名相关联,就像DOC没有安装MS-Office的PC 一样.然后,我双击任何名称包含空白字符的文件,我的程序将启动以打开该文件.我用下面的声明:
string[] args = Environment.GetCommandLineArgs();
Run Code Online (Sandbox Code Playgroud)
然后args[1]将包含该文件的完整路径文件名.然后,我可以打开它.但现在的问题是,如果文件名包含空白字符,则args[1]包含的文件名与实际文件名不同.作为标题,如果我的文件在e:\tmp3,文件名是test uesr=doc.doc,我期望args[1]包含
"e:\tmp3\test user-doc.doc",
Run Code Online (Sandbox Code Playgroud)
但它实际上包含
"E:\tmp3\TESTUS~1.DOC"
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么以及如何解决它?谢谢.
如前所述,这些是8.3文件名.如果您需要从短名称转换为全名,那么您可以使用C#轻松完成此操作.
new FileInfo("E:\tmp3\TESTUS~1.DOC").FullName
Run Code Online (Sandbox Code Playgroud)
走另一条路需要PInvoke调用GetShortPathName.请注意,这不适用于所有NTFS卷,因为可以关闭短名称,但默认情况下,它们会在操作系统所在的卷上打开.
class Program
{
[DllImport("kernel32.dll", SetLastError = true)]
private static extern int GetShortPathName(String pathName, StringBuilder shortName, int cbShortName);
static void Main(string[] args)
{
var fullname = args[0];
var shortPathBuilder = new StringBuilder(fullname.Length);
GetShortPathName(fullname, shortPathBuilder, shortPathBuilder.Length);
var shortname = shortPathBuilder.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |