我想知道是否有一个函数,可以识别如果文件名是短文件名(8.3文件名)。我不想文件的完整路径,但只是一种方式来识别给定的文件名是否遵循https://en.wikipedia.org/wiki/8.3_filename约定。所以我的输入函数将只是文件名,我需要输出布尔值是或否。例如:
文件:* 描述. htm *,输出:没有
文件 * 描述~1.htm 、 描述2~. htm *,输出:是的。
我想知道是否有一个函数,可以识别如果文件名是短文件名(8.3文件名)。我不想文件的完整路径,但只是一种方式来识别给定的文件名是否遵循https://en.wikipedia.org/wiki/8.3_filename约定。所以我的输入函数将只是文件名,我需要输出布尔值是或否。例如:
文件:* 描述. htm *,输出:没有
文件 * 描述~1.htm 、 描述2~. htm *,输出:是的。
5条答案
按热度按时间utugiqy61#
假设你在谈论windows(用短文件名“n”all),你可以用途:获取短路径名称。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364989(v=vs.85).aspx
然后比较两者。
除非你的字面意思是--这个字符串的格式是8个字符的名称和3个字符的扩展名--在这种情况下,应该很容易计算出来。
为了确定格式,你可以使用regex(在c#中-其他regex是可用的):
这应该可以让您开始--但是您可能需要稍微修改一下regex字符串。
尝试https://regex101.com/为一个体面的在线regex的东西马鲍勃。
cqoc49vn2#
您可以在kernel32.dll中使用GetShortPathName转换为短路径名,然后检查它是否返回相同的字符串。
必须声明以下内容才能访问此函数:
然后创建一个StringBuilder并调用GetShortPathName:
ghhkc1vu3#
你可以这样做:
hgc7kmma4#
FWIW,这里有一个正则表达式来判断整个路径是否为8.3。
31moq8wy5#
修改已接受的答案以剔除无效的非打印字符、空格(0x20)和ASCII范围以上的任何字符,下面是一个正则表达式:
这有点难看,但我认为这是用来检查整个(可选根)路径的正则表达式:
注意这是可能需要的,因为不幸的是PathExtensions.GetShortPathName不能保证工作。系统卷上有一个属性可以设置为不提供8.3名称。所以如果你真的需要一个8.3名称,这个正则表达式会告诉你是否有。