包含函数在子目录中找不到特定文件

Contains function doesn't find specific files in sub directories

我创建了一个字符串数组,该数组使用 Directory.GetFiles 函数,该函数使用我项目中所有子目录的 .cs 文件扩展名填充该数组。这很好,但是,我试图将这些文件写入文本文档,同时使用 contains 方法从数组中排除特定文件,例如 "AssemblyInfo.cs" 和 "TemporaryGeneratedFiles_xxx.cs" 以过滤具有这些名称的文件。在大多数情况下,这些文件中的绝大部分都没有写入文本文档,但是,在少数情况下,这些文件设法显示在文本文档中。

我试过使用 foreach 语句而不是 for 循环。我试过将 str.flush()str.close()directoryNames.Dispose()directoryNames.Close() 放在 for 循环的不同位置。我尝试嵌套 if 语句而不是使用 && 运算符。 || 运算符在这种情况下不起作用。我试过使用整个文件名,只使用文件名的一些片段,none 似乎有效。有一次我确实设法删除了所有包含 "Temporary" 的文件,但 "AssemblyInfo.cs" 文件仍然存在。我什至做了一个方法来完全删除文件名中带有临时或程序集一词的任何内容,但也失败了。

FileStream directoryNames = new FileStream(dirListPath, FileMode.OpenOrCreate);
StreamWriter str = new StreamWriter(directoryNames);

string[] allFiles = Directory.GetFiles(dirPath, "*.cs", SearchOption.AllDirectories);

for (int i = 0; i < allFiles.Length; i++)
{
    if ((!allFiles[i].Contains("Temporary")) && (!allFiles[i].Contains("Assembly")))
    {
        str.Write(allFiles[i] + Environment.NewLine);
    }
}
str.Flush();
str.Close();
directoryNames.Dispose();
directoryNames.Close();

没有出现错误消息,但如上所述,意外文件会弹出它们不应该出现的位置。任何帮助将不胜感激。

正如@steve 建议的那样,您的代码忽略了区分大小写。 试试这个。

var allFiles = Directory.EnumerateFiles(dirPath, "*.cs", SearchOption.AllDirectories)
                        .Where(file => file.IndexOf("Temporary", StringComparison.InvariantCultureIgnoreCase) < 0
                                       && file.IndexOf("Assembly", StringComparison.InvariantCultureIgnoreCase) < 0);

File.WriteAllLines(dirListPath, allFiles);

PS:这段代码对你的代码做了很多改动,但本质上是一样的。

感谢所有post编辑的人。 经过一些测试,mjwillis 是正确的。它没有覆盖文本文件中的内容,而是一直写入文件的顶部并添加到先前写入的内容中。通过添加

修复它
using (FileStream clearTextDocument = File.Create(dirListPath)) { }

在 FileStream DirectoryNames 行之前。如果文本文档比这更有吸引力,请随意 post 另一种清除文本文档的方法。