包含功能在子目录中找不到特定文件

时间:2019-07-03 12:30:03

标签: c# directory contains getfiles

我创建了一个利用Directory.GetFiles函数的字符串数组,该函数使用来自项目中所有子目录的.cs文件扩展名填充该数组。很好,但是,我尝试使用包含方法过滤包含这些名称的文件,同时将这些文件写入文本文档,同时从数组中排除诸如“ AssemblyInfo.cs”和“ TemporaryGeneratedFiles_xxx.cs”之类的特定文件。在大多数情况下,这些文件中的大多数都没有写入文本文档,但是,在某些情况下,这些文件设法显示在文本文档中。

我尝试使用foreach语句代替for循环。我尝试通过将str.flush()str.close()directoryNames.Dispose()directoryNames.Close()放置在for循环的不同位置来解决这些问题。我尝试嵌套if语句,而不使用&&运算符。 ||运算符在这种情况下不起作用。我尝试使用整个文件名,并且只使用文件名的一点点,但这似乎都不起作用。有一次我确实设法删除了所有带有“ 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();

没有错误消息发生,但是如上所述,意外的文件弹出了不应该出现的地方。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

感谢所有发布者。 经过一些测试,mjwillis是正确的。它没有覆盖文本文件中的内容,而是继续写入文件的顶部并添加到先前写入的内容中。通过添加

对其进行了修复
using (FileStream clearTextDocument = File.Create(dirListPath)) { }

在FileStream DirectoryNames行之前。如果此文档更具吸引力,请随意发布另一种清除文本文档的方法。

答案 1 :(得分:-1)

如@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:此代码对您的代码进行了许多更改,但从本质上讲,它们是相同的。