Contains函数无法在子目录中找到特定文件。
Contains函数无法在子目录中找到特定文件。
我创建了一个字符串数组,利用Directory.GetFiles函数从项目的所有子目录中获取以.cs文件扩展名结尾的文件,并将其填充到数组中。这是可以的,但是,我试图将这些文件写入文本文档时,排除数组中的特定文件,如"AssemblyInfo.cs"和"TemporaryGeneratedFiles_xxx.cs",使用contains方法来过滤这些文件名。大部分情况下,这些文件并没有被写入文本文档,但是有几种情况下,这些文件还是出现在了文本文档中。
我尝试使用foreach语句而不是for循环。我尝试在for循环的不同位置放置str.flush()
,str.close()
,directoryNames.Dispose()
和directoryNames.Close()
。我尝试嵌套if
语句而不是使用&&
运算符。在这种情况下,||
运算符无法工作。我尝试使用整个文件名和文件名的一部分,但是这些都没有起作用。有一次,我成功删除了所有包含"Temporary"的文件,但是"AssemblyInfo.cs"文件仍然存在。我甚至制作了一个方法来完全删除文件名中包含单词"temporary"或"assembly"的文件,但是也失败了。
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();
没有出现错误消息,但如上所述,意外的文件出现在了不应该出现的位置。非常感谢任何帮助。
代码中使用的是Directory.EnumerateFiles方法,在指定的目录及其子目录中搜索符合指定搜索模式的文件,并返回一个包含文件路径的可枚举集合。代码中的SearchOption.AllDirectories参数表示搜索所有子目录。
问题出现的原因是代码中的搜索模式没有找到特定的文件。解决方法是在代码中使用了Where方法来过滤掉不符合条件的文件。在这个例子中,通过调用IndexOf方法来判断文件路径中是否包含"Temporary"或"Assembly"这两个关键字,如果不包含则返回true,表示该文件符合条件。
最后,将符合条件的文件路径写入到一个指定的文件中,使用了File.WriteAllLines方法。
需要注意的是,代码中使用了StringComparison.InvariantCultureIgnoreCase参数来忽略大小写进行比较,这样可以确保不受操作系统的语言和区域设置的影响,使得比较结果更加准确。
这段代码通过使用Directory.EnumerateFiles方法和Where方法来搜索和过滤文件,最终将符合条件的文件路径写入到指定文件中。通过忽略大小写进行比较,可以提高搜索的准确性。
问题出现的原因:代码中的写入文件操作没有覆盖原有文件内容,而是在原有内容的基础上继续添加新内容。
解决方法:在读取文件前,先创建一个新的空文件来清空原有内容。
以下是完整的文章:
感谢所有留言的朋友们。
经过一些测试,mjwillis的观点是正确的。在代码中,文件写入操作没有覆盖原有文件内容,而是在原有内容的基础上继续添加新内容。为了解决这个问题,我添加了以下代码:
using (FileStream clearTextDocument = File.Create(dirListPath)) { }
这段代码会在读取文件之前创建一个新的空文件,以清空原有内容。如果有其他更好的方法来清空文件内容,请随时留言分享。
希望以上内容能帮助到大家。谢谢!