我需要使用最快的方法(在我看来是readalltext)从txt文件中读取所有文本,但我不知道如何正确编写代码:
string[] files = Directory
.GetFiles(@"C:\Users\Wiz\Desktop\test","*.txt", SearchOption.AllDirectories);
var letter = File.ReadAllText(files);
我需要使用最快的方法(在我看来是readalltext)从txt文件中读取所有文本,但我不知道如何正确编写代码:
string[] files = Directory
.GetFiles(@"C:\Users\Wiz\Desktop\test","*.txt", SearchOption.AllDirectories);
var letter = File.ReadAllText(files);
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();
对我来说有趣的是指出最快的方法,所以我尝试了三种技术:
并行处理在这种情况下效果最好,Directory.EnumerateFiles
比 Directory.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);
});
欢迎随意添加想法、思考……
System.Threading.Tasks.Parallel
自 .Net Framework 4.0 起可用。 - CeOnSqlforeach (var file in files)
{
// Do the reading of your file here.
}
GetFiles
和ReadAllText
的参数和返回值。 - SinatrDirectory.GetFiles
可能返回多个文件,File.ReadAllText(files)
读取单个文件的文本。明白了吗?你需要在files
上进行循环。 - Tim Schmelter