C# 检查文件名在FileInfo数组中是否存在多次 FileInfo[]folderFiles=folder.GetFiles(); foreach(folderFiles中的FileInfo文件) { int fileCount=0; StreamWriter sw=null; string fileName=Path.GetFileNameWithoutExtension(file.Name); string[]brkedfilename=fileName.Split(“”“); 字符串stringToCheck=brkedfilename[3]; 对于(int i=0;i

C# 检查文件名在FileInfo数组中是否存在多次 FileInfo[]folderFiles=folder.GetFiles(); foreach(folderFiles中的FileInfo文件) { int fileCount=0; StreamWriter sw=null; string fileName=Path.GetFileNameWithoutExtension(file.Name); string[]brkedfilename=fileName.Split(“”“); 字符串stringToCheck=brkedfilename[3]; 对于(int i=0;i,c#,C#,您可以使用LINQ查找具有相同brkedNames的文件: FileInfo[] folderFiles = folder.GetFiles(); foreach (FileInfo file in folderFiles) { int fileCount = 0; StreamWriter sw = null; string fileName = Path.GetFileNameWithoutExtension(file.Name); string[]

您可以使用LINQ查找具有相同brkedNames的文件:

FileInfo[] folderFiles = folder.GetFiles();

foreach (FileInfo file in folderFiles)
{

    int fileCount = 0;

    StreamWriter sw = null;

    string fileName = Path.GetFileNameWithoutExtension(file.Name);

    string[] brkedfilename = fileName.Split('_');

    string stringToCheck = brkedfilename[3];

    for (int i = 0; i <= folderFiles.Count() - 1; i++)
    {
        string fileName2 = folderFiles[i].Name;

        string[] brkedfilename2 = fileName2.Split('_');

        if (brkedfilename2[3] == stringToCheck)
        {
            fileCount = ++fileCount;

            if (fileCount == 2)
           {
                sw = new StreamWriter(folderPath + "/" + newFileName, true);
                sw.WriteLine(stringToCheck + "  " + "--" + "  " + "Repeated in folder " + " " + folder.Name);
                sw.Close();
            }
        }
    }
}
此查询按拆分名称的第四部分对所有文件进行分组(注意:在您的原始代码中,我不检查是否至少有4部分),然后选择包含多个文件的组。它还提供一些统计信息-brked名称、同名文件数和文件集合

var repeatedFiles = from f in folderFiles
                    let brkedName = Path.GetFileNameWithoutExtension(f.Name).Split('_')[3]
                    group f by brkedName into g
                    where g.Count() > 1
                    select new
                    {
                        BrkedName = g.Key,
                        Count = g.Count(),
                        Files = g
                    };

您可以使用LINQ查找具有相同brkedNames的文件:

FileInfo[] folderFiles = folder.GetFiles();

foreach (FileInfo file in folderFiles)
{

    int fileCount = 0;

    StreamWriter sw = null;

    string fileName = Path.GetFileNameWithoutExtension(file.Name);

    string[] brkedfilename = fileName.Split('_');

    string stringToCheck = brkedfilename[3];

    for (int i = 0; i <= folderFiles.Count() - 1; i++)
    {
        string fileName2 = folderFiles[i].Name;

        string[] brkedfilename2 = fileName2.Split('_');

        if (brkedfilename2[3] == stringToCheck)
        {
            fileCount = ++fileCount;

            if (fileCount == 2)
           {
                sw = new StreamWriter(folderPath + "/" + newFileName, true);
                sw.WriteLine(stringToCheck + "  " + "--" + "  " + "Repeated in folder " + " " + folder.Name);
                sw.Close();
            }
        }
    }
}
此查询按拆分名称的第四部分对所有文件进行分组(注意:在您的原始代码中,我不检查是否至少有4部分),然后选择包含多个文件的组。它还提供一些统计信息-brked名称、同名文件数和文件集合

var repeatedFiles = from f in folderFiles
                    let brkedName = Path.GetFileNameWithoutExtension(f.Name).Split('_')[3]
                    group f by brkedName into g
                    where g.Count() > 1
                    select new
                    {
                        BrkedName = g.Key,
                        Count = g.Count(),
                        Files = g
                    };

我建议使用hashset。hashset不能包含重复的元素。当您添加重复的元素时,请执行hashset方法
add
return
false
,程序继续运行,但hashset不会获取重复的元素

foreach(var group in repeatedFiles)
   sw.WriteLine($"{group.BrkedName} -- repeated {group.Count} times in {folder.Name}");
var duplicate=new HashSet();
foreach(folderFiles中的FileInfo文件)
{
int fileCount=0;
StreamWriter sw=null;
string fileName=Path.GetFileNameWithoutExtension(file.Name);
string[]brkedfilename=fileName.Split(“”“);
字符串stringToCheck=brkedfilename[3];
如果(!duplicate.Add(stringToCheck))
{
sw=新StreamWriter(folderPath+“/”+新文件名,true);
sw.WriteLine(stringToCheck++--++++++,在文件夹“+”+folder.Name”中重复);
sw.Close();
}
}

当元素在
Hashset
中时,程序会添加每个元素。当我知道元素在
Hashset
中,并且我根据需要保存在文件中时,我建议使用Hashset。Hashset不能包含重复的元素。添加重复元素时执行hashset方法
Add
返回
false
,程序继续运行,但hashset不会获取重复的元素

foreach(var group in repeatedFiles)
   sw.WriteLine($"{group.BrkedName} -- repeated {group.Count} times in {folder.Name}");
var duplicate=new HashSet();
foreach(folderFiles中的FileInfo文件)
{
int fileCount=0;
StreamWriter sw=null;
string fileName=Path.GetFileNameWithoutExtension(file.Name);
string[]brkedfilename=fileName.Split(“”“);
字符串stringToCheck=brkedfilename[3];
如果(!duplicate.Add(stringToCheck))
{
sw=新StreamWriter(folderPath+“/”+新文件名,true);
sw.WriteLine(stringToCheck++--++++++,在文件夹“+”+folder.Name”中重复);
sw.Close();
}
}

当元素在
Hashset
Add
metod return
false
时,当我知道元素在
Hashset
中并且我根据需要保存在文件中时,程序添加每个元素列出所有存在的文件名。然后,您可以循环字典以写入控制台。

您可以使用字典(文件名,重复时间)列出所有文件名是否存在。然后,您可以循环字典写入控制台。

如何区分不带扩展名要写入的文件?是否有任何标准?如果条件仅是检查文件名是否存在2次,则可以从函数返回,或在sw.Close()后断开for循环;如何区分要在没有扩展名的情况下写入哪个文件?是否有任何标准?如果条件只是检查文件名是否存在2次,那么您可以从函数返回,或者在sw.Close()之后中断for循环;非常感谢您,先生…我尝试了上述代码,结果成功了…非常幸运:)非常感谢您,先生……我尝试了上面的代码,它成功了……非常高兴……)这里:这里: