Contains函数无法在子目录中找到特定文件。

13 浏览
0 Comments

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();

没有出现错误消息,但如上所述,意外的文件出现在了不应该出现的位置。非常感谢任何帮助。

0
0 Comments

代码中使用的是Directory.EnumerateFiles方法,在指定的目录及其子目录中搜索符合指定搜索模式的文件,并返回一个包含文件路径的可枚举集合。代码中的SearchOption.AllDirectories参数表示搜索所有子目录。

问题出现的原因是代码中的搜索模式没有找到特定的文件。解决方法是在代码中使用了Where方法来过滤掉不符合条件的文件。在这个例子中,通过调用IndexOf方法来判断文件路径中是否包含"Temporary"或"Assembly"这两个关键字,如果不包含则返回true,表示该文件符合条件。

最后,将符合条件的文件路径写入到一个指定的文件中,使用了File.WriteAllLines方法。

需要注意的是,代码中使用了StringComparison.InvariantCultureIgnoreCase参数来忽略大小写进行比较,这样可以确保不受操作系统的语言和区域设置的影响,使得比较结果更加准确。

这段代码通过使用Directory.EnumerateFiles方法和Where方法来搜索和过滤文件,最终将符合条件的文件路径写入到指定文件中。通过忽略大小写进行比较,可以提高搜索的准确性。

0
0 Comments

问题出现的原因:代码中的写入文件操作没有覆盖原有文件内容,而是在原有内容的基础上继续添加新内容。

解决方法:在读取文件前,先创建一个新的空文件来清空原有内容。

以下是完整的文章:

感谢所有留言的朋友们。

经过一些测试,mjwillis的观点是正确的。在代码中,文件写入操作没有覆盖原有文件内容,而是在原有内容的基础上继续添加新内容。为了解决这个问题,我添加了以下代码:

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

这段代码会在读取文件之前创建一个新的空文件,以清空原有内容。如果有其他更好的方法来清空文件内容,请随时留言分享。

希望以上内容能帮助到大家。谢谢!

0