我创建了一个利用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();
没有错误消息发生,但是如上所述,意外的文件弹出了不应该出现的地方。任何帮助将不胜感激。
答案 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:此代码对您的代码进行了许多更改,但从本质上讲,它们是相同的。