计算有多少个文件以相同的第一个字符开头 C#

Count how many files starts with the same first characters c#

我想制作一个函数来计算所选文件夹中有多少文件以相同的 10 个字符开头。

例如,文件夹中的文件名为 File1、File2、File3,int 计数将为 1,因为所有 3 个文件都以相同的字符“文件”开头,如果文件夹中的文件为

File1,File2,File3,Docs1,Docs2,pdfs1,pdfs2,pdfs3,pdfs4 

会给出 3,因为 fileName.Substring(0, 4).

有 3 个唯一值

我试过类似的方法,但它给出了文件夹中的文件总数。

int count = 0;

foreach (string file in Directory.GetFiles(folderLocation))
{
    string fileName = Path.GetFileName(file);

    if (fileName.Substring(0, 10) == fileName.Substring(0, 10))
    {
        count++;
    }
}

知道如何计算吗?

您可以实例化一个具有唯一名称的文件字符串列表,并检查每个文件是否在该列表中:

int count = 0;
int length = 0;
List<string> list = new List<string>();
foreach (string file in Directory.GetFiles(folderLocation))
{
    boolean inKnown = false;
    string fileName = Path.GetFileName(file);
    for (string s in list)
    {
        if (s.Length() < length)
        {
            // Add to known list just so that we don't check for this string later
            inKnown = true;
            count--;
            break;
        }
        if (s.Substring(0, length) == fileName.Substring(0, length))
        {
            inKnown = true;
            break;
        }
    }
    if (!inKnown)
    {
        count++;
        list.Add(s);
    }
}

这里的限制是你问的是前十个字符是否相同,但你给出的例子显示了前 4 个,所以只需根据你想检查的字符数调整长度变量。

您可以在 Linq 的帮助下尝试 查询 目录:

using System.IO;
using System.Linq;

...

int n = 10;

int count = Directory
  .EnumerateFiles(folderLocation, "*.*")
  .Select(file => Path.GetFileNameWithoutExtension(file))
  .Select(file => file.Length > n ? file.Substring(0, n) : file)
  .GroupBy(name => name, StringComparer.OrdinalIgnoreCase)
  .OrderByDescending(group => group.Count())
  .FirstOrDefault()
 ?.Count() ?? 0;

@acornTime 给我主意,他的解决方案没有用,但这个有效。感谢您的帮助!

List<string> list = new List<string>();
        foreach (string file in Directory.GetFiles(folderLocation))
        {
            string fileName = Path.GetFileName(file);
            list.Add(fileName.Substring(0, 10));
        }
        list = list.Distinct().ToList();
        //count how many items are in list
        int count = list.Count;