如何读取所有txt文件(*.txt)中的所有文本

4

我需要使用最快的方法(在我看来是readalltext)从txt文件中读取所有文本,但我不知道如何正确编写代码:

string[] files = Directory
  .GetFiles(@"C:\Users\Wiz\Desktop\test","*.txt", SearchOption.AllDirectories);

var letter = File.ReadAllText(files);

阅读 msdn 有关 GetFilesReadAllText 的参数和返回值。 - Sinatr
1
https://dev59.com/Dmsz5IYBdhLWcg3wOlSh - Sinan AKYAZICI
1
Directory.GetFiles 可能返回多个文件,File.ReadAllText(files) 读取单个文件的文本。明白了吗?你需要在 files 上进行循环。 - Tim Schmelter
3个回答

2

File.ReadAllText 期望传入一个文件路径,但是 Directory.GetFiles 返回的是一个文件数组。所以你需要使用循环/linq来获取每个文件的文本。

string sDir = @"C:\Users\Wiz\Desktop\test";
string[] files = Directory.GetFiles(sDir, "*.txt", SearchOption.AllDirectories);
string[] letters = files.Select(x => File.ReadAllText(x)).ToArray();

一切都很好,但无论如何我没有得到我真正想要的东西。 - Doe

2

对我来说有趣的是指出最快的方法,所以我尝试了三种技术:

概述

overview * ~200个滴答声

结论

并行处理在这种情况下效果最好,Directory.EnumerateFilesDirectory.GetFiles(搜索模式为* .txt和包括子目录)要快得多。

代码

A - GetFiles和ReadAllText

foreach (var file in Directory.GetFiles("C:\\Program Files (x86)", "*.txt", SearchOption.AllDirectories))
{
   var a = File.ReadAllText(file);
}

B - 枚举文件和读取文本

foreach (var file in Directory.EnumerateFiles("C:\\Program Files (x86)", "*.txt", SearchOption.AllDirectories))
{
   var a = File.ReadAllText(file);
}

C - 并行方法

var files = Directory.EnumerateFiles("C:\\Program Files (x86)", "*.txt", SearchOption.AllDirectories);
Parallel.ForEach(files,(current) => 
{
    var a = File.ReadAllText(current);
});

欢迎随意添加想法、思考……


很难定义最佳方法,这取决于在特定情况下搜索文件或读取文件哪个任务更重要... - CeOnSql
忘记了:System.Threading.Tasks.Parallel 自 .Net Framework 4.0 起可用。 - CeOnSql
抱歉@CodeCaster,不知道确切的意思-您能否解释一下您认为缺少什么?为了分析,我使用了这个函数(100次迭代):https://dev59.com/5XNA5IYBdhLWcg3wNrAy - CeOnSql
还有一个问题: 如果我有一个txt文件,里面有单词image1、2、3和另一个txt文件中的字母a b c等。我应该如何读取这些文件,使它们变成如下形式:image1 a image1 a image1 a image2 b image2 b image2 b image3 c image3 c image3 c这意味着,如果图像文件已经读取完成但第二个文件没有读取完成,那么第一个文件将重新开始读取(for循环),直到第二个文件读取完为止。 - Doe

1
你需要使用循环来读取所有文件,因为 ReadAllText 只能一次读取一个文件。
foreach (var file in files)
{
    // Do the reading of your file here.
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接