计算有多少个文件以相同的第一个字符开头 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;
我想制作一个函数来计算所选文件夹中有多少文件以相同的 10 个字符开头。
例如,文件夹中的文件名为 File1、File2、File3,int 计数将为 1,因为所有 3 个文件都以相同的字符“文件”开头,如果文件夹中的文件为
File1,File2,File3,Docs1,Docs2,pdfs1,pdfs2,pdfs3,pdfs4
会给出 3,因为 fileName.Substring(0, 4)
.
我试过类似的方法,但它给出了文件夹中的文件总数。
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;