如何比较文件名,然后在重复时从文件夹中唯一地分类到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);
}
现在得到了我想要的,谢谢大家~
您的代码基本上说要将以下内容放入列表框中:
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);