首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“测试用户-doc.doc”==> TESTUS~1.DOC?

为什么“测试用户-doc.doc”==> TESTUS~1.DOC?
EN

Stack Overflow用户
提问于 2014-04-18 03:47:32
回答 4查看 140关注 0票数 1

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

代码语言:javascript
复制
string[] args = Environment.GetCommandLineArgs();

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

代码语言:javascript
复制
"e:\tmp3\test user-doc.doc",

但它实际上包含了

代码语言:javascript
复制
"E:\tmp3\TESTUS~1.DOC"

有人能告诉我为什么怎么解决吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-18 06:28:58

如前所述,这些是8.3文件名。如果您需要将短名称转换为全名,那么您可以很容易地使用C#完成这一任务。

代码语言:javascript
复制
new FileInfo("E:\tmp3\TESTUS~1.DOC").FullName

另一种方式需要对PInvoke调用GetShortPathName请注意,这并不适用于所有NTFS卷作为短名称可以关闭,但对于操作系统打开的卷,默认情况下它们是打开的。

代码语言:javascript
复制
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();
    }
}
票数 5
EN

Stack Overflow用户

发布于 2014-08-15 16:04:46

您应该在%1注册表项中的shell\open\command替换项周围加上双引号。例如:

代码语言:javascript
复制
"C:\Program Files\MyApp\MyApp.exe" "%1"

而不是

代码语言:javascript
复制
"C:\Program Files\MyApp\MyApp.exe" %1

如果不包括双引号,Windows会检测到带有空格(或其他参数分隔符)的文件名不太可能工作,并替换短文件名。这是为了与16位Windows程序兼容(Windows3.1引入了HKCR\shell键)。

票数 2
EN

Stack Overflow用户

发布于 2014-04-18 03:55:32

他们被称为8.3文件名。基本上,它们是文件分配表中文件的别名,它缩短了文件的路径。

8.3指“8个字符.然后是一个圆点.然后是3个字符”。这三个字符显然是文件扩展名。

另外,您将注意到TESTUS~1的长度为8个字符。

据我所知,实际上没有什么可以阻止Windows这样做。您可以将磁盘格式化为NTFS,我认为(我不认为NTFS与文件“混叠”有这么大的关系)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23147054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档