如何识别文件名是8.3短文件名

时间:2015-09-28 20:27:03

标签: c# .net

我想知道是否有一个函数可以识别文件名是否是短文件名(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 ,输出:是。

4 个答案:

答案 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})?$