我想知道是否有一个函数可以识别文件名是否是短文件名(8.3文件名)。 我不想要文件的完整路径,而只是一种识别给定文件名是否遵循https://en.wikipedia.org/wiki/8.3_filename约定的方法。 所以我对函数的输入只是文件名,我需要输出boolean yes或no。 e.g:
file: description.htm ,输出:no
file descri~1.htm , descri2~ .htm ,输出:是。
答案 0 :(得分:3)
假设您正在谈论Windows(短文件名为'n'的内容),您可以使用:GetShortPathName。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364989(v=vs.85).aspx
然后比较两者。除非你的字面意思是 - 只是这个字符串的格式为8个字符的名称和3个字符的扩展名 - 在这种情况下应该很容易解决。
要确定您可以使用正则表达式的格式(在c#中 - 其他正则表达式可用):
Regex r = new Regex(@"^\S{1,8}\.\S{1,3}$");
r.IsMatch("somefile.ext");
这应该让你开始 - 但你可能想要按一下正则表达式字符串。
尝试使用https://regex101.com/获得体面的正则表达式的东西。
答案 1 :(得分:1)
您可以在kernel32.dll中使用GetShortPathName转换为短路径名,然后检查它是否返回相同的字符串。
您必须声明以下内容才能访问此功能:
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern Int32 GetShortPathName(String path, StringBuilder shortPath, Int32 shortPathLength);
然后创建一个StringBuilder并调用GetShortPathName:
StringBuilder shortPath = new StringBuilder(myPath.Length + 1);
PathExtensions.GetShortPathName(myPath, shortPath, shortPath.Capacity);
if (myPath == shortPath.ToString()) {
//short path name
}
答案 2 :(得分:0)
你可以这样做:
public static bool Is83(string fileName)
{
var parts = Path.GetFileName(fileName).Split('.');
return parts.Length == 2 && parts[0].Length <= 8 && parts[1].Length <= 3;
}
答案 3 :(得分:0)
FWIW,这是一个判断整条路径是否为8.3的正则表达式。
^[A-Z]:\\(?:[^\\ ]{1,8}(?:\.[^\\ ]{1,3})?\\)+[^\\ ]{1,8}(?:\.[^\\ ]{1,3})?$