如何比较文件名,然后在重复时从文件夹中唯一地分类到ListBox中

本文关键字:文件夹 唯一 ListBox 分类 比较 何比较 文件名 然后 | 更新日期: 2023-09-27 18:24:28

我有json文件,我正在尝试对其进行分类,因此文件名如下:

 inputTestingSetting_test
 inputTestingSetting_test1310
 inputTestingSetting_test1310_ckf
 inputTestingSetting_test1310_ols
 inputTestingSetting_test1310_sum
 inputTestingSetting_test1311_ckf
 inputTestingSetting_test1311_ols
 inputTestingSetting_test1311_sum

所以我想要在列表框lbJsonFileNames中的输出将是

test
test1310
test1311

目前我的代码是

 DirectoryInfo dInfo = new DirectoryInfo(tbJSFolder.Text);
        FileInfo[] Files = dInfo.GetFiles("*.json");
        List<jSonName> jsonName = new List<jSonName>();
        foreach (FileInfo file in Files)
        {
            string filename = Path.GetFileNameWithoutExtension(file.Name);
            string[] fileNameSplit = filename.Split('_');

                jsonName = new List<jSonName>{
                new jSonName(fileNameSplit[0],fileNameSplit[1])
            };
            for(int i=0;i<jsonName.Count;i++)
            {
                if(jsonName[i].TestNumber == fileNameSplit[1])
                {
                    lbJsonFileNames.Items.Add(jsonName[i].TestNumber);
                }
            }
        }

所以我对lbJsonFileNames的输出是我想要的,但它是重复的。可以只展示一个吗?我试着把jsonName[i].TestNumber放到jsonName[i+1].TestNumber。但由于超出范围而失败。

有没有办法读取文件名,然后将其与以前的文件名进行比较,看看是否相同?如果相同,忽略,转到下一个文件名,如果不同,则将其添加到ListBox 中

将我的代码更改为

DirectoryInfo dInfo = new DirectoryInfo(tbJSFolder.Text);
        FileInfo[] Files = dInfo.GetFiles("*.json");
        List<jSonName> jsonName = new List<jSonName>();
        HashSet<string> fileNames = new HashSet<string>();
        foreach (FileInfo file in Files)
        {
            string filename = Path.GetFileNameWithoutExtension(file.Name);
            string[] fileNameSplit = filename.Split('_');
            fileNames.Add(fileNameSplit[1]);
        }
        foreach(var value in fileNames)
        {
            lbJsonFileNames.Items.Add(value);
        }

现在得到了我想要的,谢谢大家~

如何比较文件名,然后在重复时从文件夹中唯一地分类到ListBox中

您的代码基本上说要将以下内容放入列表框中:

test
test1310
test1310
test1310
test1310
test1311
test1311
test1311

lbJsonFileNames.Items.Add(jsonName[i].TestNumber);中添加之前,请先检查是否重复。也许您可以将该列表放入Set变量中。Set将自动删除重复项。然后将Set放回lbJsonFileNames

[编辑]很抱歉,dotnet中没有Set。请改用HashSet。[/Edit]

您的代码没有提到jSonName类是什么样的,构造函数参数代表什么。然而,从输入中获得输出可能要容易得多:

        string[] all = Directory.GetFiles(tbJSFolder.Text, "*.json")
            .Select(x => Path.GetFileNameWithoutExtension(x))
            .Select(x => x.Split(new char[] { '_' })[1])
            .Distinct().ToArray();
        lbJsonFileNames.Items.AddRange(all);