我有一个文件名列表,我要检查是否存在重复的文件名,但扩展名不同
示例: Randomfilename.xlsx和Randomfilename.pptx
我的方法如下:
string tempFileName = originalFilename.Remove(file.LastIndexOf("."));
if (allFilesInDirectory.Contains( string that starts with tempFileName ))
但是我不认为有这个确切的功能。有什么解决方法?
答案 0 :(得分:4)
您可以使用LINQ Any
函数
allFilesInDirectory.Any(s => s.StartsWith(tempFileName))
或者如果您要查找元素
var file = allFilesInDirectory.FirstOrDefault(s => s.StartsWith(tempFileName));
编辑
没有LINQ
allFilesInDirectory.FindAll(s => s.StartsWith(tempFileName)).Count > 0
或
var fileName = allFilesInDirectory.Find(s => s.StartsWith(tempFileName));
答案 1 :(得分:4)
像这样吗?
var filenamesGrouped = allFilesInDirectory.GroupBy(x => Path.GetFileNameWithoutExtension(x));
var duplicates = filenamesGrouped.Count() > 1;
答案 2 :(得分:3)
您可以在此处使用LINQ对具有相同文件名的所有文件进行分组,并过滤具有多个重复文件名的组:
var duplicates = Directory
.GetFiles(path)
.GroupBy(f => Path.GetFileNameWithoutExtension(f))
.Where(grp => grp.Count() > 1);
以上方法使用Directory.GetFiles()
列出目录中的文件,使用Enumerable.GroupBy()
分组不带扩展名的文件,可以使用Path.GetFileNameWithoutExtension()
将其提取。然后,您可以使用Enumerable.Where()
过滤组。
演示:
var duplicates = Directory
.GetFiles(path)
.GroupBy(f => Path.GetFileNameWithoutExtension(f))
.Where(grp => grp.Count() > 1);
foreach (var fileGroup in duplicates)
{
Console.WriteLine($"{fileGroup.Key} : {string.Join(", ", fileGroup.Select(f => Path.GetFileName(f)))}");
}
输出:
Randomfilename : Randomfilename.csv, Randomfilename.txt
如果您要像问题中那样检查特定的文件名:
var duplicates = Directory
.GetFiles(path)
.Where(f => Path.GetFileNameWithoutExtension(f) == "Randomfilename");
if (duplicates.Count() > 1)
{
// We found duplicates
}
我们还可以包装成一个方法:
private static bool FileHasDuplicates(string path, string filename)
{
return Directory
.GetFiles(path)
.Where(f => Path.GetFileNameWithoutExtension(f) == filename)
.Count() > 1;
}
如果还要扫描给定目录的所有子目录,则可以使用Directory.EnumerateFiles()
:
var duplicates = Directory
.EnumerateFiles(path, "*", SearchOption.AllDirectories)
.GroupBy(f => Path.GetFileNameWithoutExtension(f))
.Where(grp => grp.Count() > 1);
答案 3 :(得分:2)
您可以对allFilesInDirectory
进行排序并进行迭代。在排序列表中检查是否有彼此相邻的元素以匹配文件名(不带扩展名)。