TESTUS~1.DOC?-6ren"> TESTUS~1.DOC?-我编写了一个 c# 程序,并在未安装 MS-Office 的 PC 中将其与文件扩展名(如 DOC)相关联。然后,我双击名称中包含空白字符的任何文件,我的程序将启动以打开该文件。我使用了以下语句: s-6ren">
gpt4 book ai didi

c# - 为什么 "test user-doc.doc"==> TESTUS~1.DOC?

转载 作者:太空宇宙 更新时间:2023-11-03 18:30:29 30 4
gpt4 key购买 nike

我编写了一个 c# 程序,并在未安装 MS-Office 的 PC 中将其与文件扩展名(如 DOC)相关联。然后,我双击名称中包含空白字符的任何文件,我的程序将启动以打开该文件。我使用了以下语句:

string[] args = Environment.GetCommandLineArgs();

然后 args[1] 将包含该文件的完整路径文件名。然后,我可以打开它。但现在的问题是,如果文件名包含空白字符,args[1] 包含的文件名与真实文件名不同。作为标题,如果我的文件在 e:\tmp3 中并且文件名是 test uesr=doc.doc,我期望 args[1]包含

"e:\tmp3\test user-doc.doc",

但实际上包含

"E:\tmp3\TESTUS~1.DOC"

谁能告诉我为什么以及如何解决它?谢谢。

最佳答案

如前所述,这些是 8.3 文件名。如果您需要将短名称转换为全名,则可以使用 C# 轻松完成此操作。

new FileInfo("E:\tmp3\TESTUS~1.DOC").FullName

走另一条路需要 PInvoke 调用 GetShortPathName . Be aware that this doesn't work on all NTFS volumes因为可以关闭短名称,但默认情况下它们对于操作系统所在的卷是打开的。

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();
}
}

关于c# - 为什么 "test user-doc.doc"==> TESTUS~1.DOC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23147054/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com