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

how to compare filenames, then classify uniquely from folder into ListBox if repeated

我有 json 个文件要分类,因此文件名如下:

 inputTestingSetting_test
 inputTestingSetting_test1310
 inputTestingSetting_test1310_ckf
 inputTestingSetting_test1310_ols
 inputTestingSetting_test1310_sum
 inputTestingSetting_test1311_ckf
 inputTestingSetting_test1311_ols
 inputTestingSetting_test1311_sum

所以我想要在 ListBox 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);
        }

得到我想要的了谢谢大家~

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

test
test1310
test1310
test1310
test1310
test1311
test1311
test1311

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

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

您的代码没有提到 jSonName class 是什么以及构造函数参数代表什么。然而,从输入中获取输出 会容易得多:

        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);