我试图获取所有以特定名称开头的文件(不区分大小写)。
Directory.GetFiles似乎在OSX上是区分大小写的(但不是在Windows上),所以我想知道我的选择是什么。该目录可能很大,因此获取所有文件并在内存中过滤可能不是最好的主意。
我使用具有4.0之前单声道运行时间的Unity,因此无法使用EnumerateFiles。
有任何变通方法吗?
答案 0 :(得分:0)
IEnumerable<string> EnumerateSpecificFiles(
string directory, string initialTextForFileName)
{
foreach (string file in Directory.EnumerateFiles(directory))
{
if (file.StartsWith(initialTextForFileName, StringComparison.OrdinalIgnoreCase))
{
yield return file;
}
}
}
这样可以避免在内存中包含整个文件名列表,同时仍允许您执行不区分大小写的搜索。
修改强>
鉴于事实证明你使用的是早期版本的Mono,它不包含Directory.EnumerateFiles()
方法,你的下一个最佳选择是继续使用p / invoke自己实现该方法(甚至可能只是从当前的Mono源复制实现。)
作为黑客攻击,您至少可以通过应用部分过滤器来限制Directory.GetFiles()
返回的文件数。 E.g:
IEnumerable<string> EnumerateSpecificFiles(
string directory, string initialTextForFileName)
{
char[] initialCharacters =
{
char.ToLowerInvariant(initialTextForFileName[0]),
char.ToUpperInvariant(initialTextForFileName[0])
};
foreach (char ch in initialCharacters)
{
foreach (string file in Directory.GetFiles(directory, ch + "*"))
{
if (file.StartsWith(initialTextForFileName, StringComparison.OrdinalIgnoreCase))
{
yield return file;
}
}
}
}
最后,您可以考虑使用Directory.GetFiles()
方法一次性获取目录中的所有文件,并按上述方式过滤该结果。你可能会发现它运作良好。