如何比较文件名,然后在重复时从文件夹唯一分类到列表框中
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);
我有 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);