使用 "greatest index" 获取文件夹

Get the folder with "greatest index"

我有一个 .net 代码项目,我正在处理文件。

我有很多文件夹,命名规则是这样的:

pdf(1)
pdf(2)
pdf(3)
pdf(4)
pdf(5)

我要做的是当我插入一个新文件夹时,它的新名称应该是 (# of folders that exist+ 1) 这段代码做得很好:

 string FileDirectory = "C\test\myfiles\";
 string FileName = "pdf";
 DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(FileDirectory);

            FileSystemInfo[] filesAndDirs = hdDirectoryInWhichToSearch.GetFileSystemInfos("*" + FileName + "*");
            int i = filesAndDirs.Length;
            
            if (i>0)
            {
                    i++;
                    Directory.CreateDirectory(FileDirectory + '\' + FileName+ "(" + i + ")");
            }

现在,虽然此代码可以正常工作,但有时会出现这种情况。 例如,现有文件是:

pdf(1)
pdf(2)
pdf(5)
pdf(6),

它将尝试创建一个新文件夹,(# of folders + i) 这将是“pdf(5)”,但“pdf(5)”已经存在!

现在我的问题是:如何在这个例子中获得现有文件夹 (6) 的最高“索引”,并创建一个新文件夹 pdf(6)+1 ?

using System.Collections.Generic;
using System.Linq;
 

namespace ConsoleApp
{
    public class Program
    {
        public static void Main()
        {

            List<string> files = new List<string>{"pdf(1)","pdf(2)","pdf(3)"};
            List<string> nums = new List<string>();


            foreach (var file in files)
            {
                var str = file.Substring(file.IndexOf("(")).Replace(")","").Replace("(","");
                nums.Add(str);
            }


            var fileNums =  nums.ConvertAll(x=>x);
            var lastfileNo = fileNums.OrderByDescending(x => x).FirstOrDefault();

        }

    }

}

可能还有另一种方法

首先遍历文件并将其存储到字符串列表 然后全部转换成一个int,如果你不想转换就可以了 然后降序排列,找到第一个