温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Contains function doesn't find specific files in sub directories

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

发布于 2020-03-27 11:31:36

我创建了一个利用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();

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

查看更多

查看更多

提问者
Thomas.W.Waller
被浏览
35
Thomas.W.Waller 2019-07-03 23:28

感谢所有张贴的人。经过一些测试,mjwillis是正确的。它没有覆盖文本文件中的内容,而是继续写入文件的顶部并添加到先前写入的内容上。通过添加进行修复

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

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览