Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取文件夹中的最高版本号_C# - Fatal编程技术网

C# 获取文件夹中的最高版本号

C# 获取文件夹中的最高版本号,c#,C#,如何获取文件夹N.2.4.0.12中的最高编号文件?文件名是 N.2.1.0, N.2.1.1, N.2.1.2, N.2.4.0.8, N.2.4.0.9, N.2.4.0.10, N.2.4.0.11, N.2.4.0.12, files.txt 我尝试了很多方法,但它仍然显示N.2.4.0.09而不是N.2.4.0.12 按词典顺序排序时,版本号不一定按版本顺序排序。您应该对其进行排序,同时考虑它们是版本,而不仅仅是字符串 框架中有一个类来表示一个版本。它也具有可比性。您可以

如何获取文件夹N.2.4.0.12中的最高编号文件?文件名是

N.2.1.0,
N.2.1.1,
N.2.1.2, 
N.2.4.0.8, 
N.2.4.0.9, 
N.2.4.0.10, 
N.2.4.0.11, 
N.2.4.0.12, 
files.txt
我尝试了很多方法,但它仍然显示N.2.4.0.09而不是N.2.4.0.12


按词典顺序排序时,版本号不一定按版本顺序排序。您应该对其进行排序,同时考虑它们是版本,而不仅仅是字符串

框架中有一个类来表示一个版本。它也具有可比性。您可以将所有字符串转换为以下版本:

您的一个或多个文件似乎没有有效的文件名。您可以改为使用此选项:

var FileInOrdered = allFiles.OrderBy(f => Version.TryParse(f.Name.Substring(2), out var v) ? v : new Version(0, 0)).Last();

创建一个从文件名中提取版本号的方法,然后进行比较

Version GetVersion(string filename)
{
    var versionString = filename.Substring(filename.IndexOf("V") + 1);
    return new Version(versionString);
}
然后像这样使用这个方法:

var orderedList = allFiles.OrderBy(f => GetVersion(f.Name));

最好的方法是将版本号拆分为单独的值,然后比较每个值。这可以通过使用string.Split来完成。所有文件和Name@Kei他点菜后吃最后一道菜。问题是它是一个字符串comparison@MongZhu啊,是的,对不起,我错过了that@MongZhu你能告诉我怎么走吗?据说输入字符串的格式不正确。你的文件名都是V.X.X.X.X格式吗@这里有一些V.X.X.X它产生了什么错误?当它崩溃时,您能看到是哪个文件名导致它崩溃吗@你能用split方法代替Version类吗?不行。我需要保留所有文件和f=>f.name,你仍然可以。通过使用如下方法:allFiles.OrderByf=>GetVersionf.Name;我编辑了我的例子。您应该确保每个文件的文件名包含Vx.x或Vx.x.x或Vx.x.x.x格式的版本号,以便创建版本对象。您还应该检查文件名中是否有扩展名,该扩展名应该使用File类剥离。好的,Version类的构造函数将为您执行string.Split。因此,也许值得一试,看看它为什么不起作用。祝你好运var stringParts=string.Split.,f.Name
Version GetVersion(string filename)
{
    var versionString = filename.Substring(filename.IndexOf("V") + 1);
    return new Version(versionString);
}
var orderedList = allFiles.OrderBy(f => GetVersion(f.Name));