可以逐行读取多个文件吗
本文关键字:文件 读取 逐行 | 更新日期: 2023-09-27 18:28:23
我有处理文本的工具。工具有6个备忘录(memoEdit-devexpress)。但当用户输入大文本(每个备忘录50-100k行)时,抛出异常内存不足错误
为了避免这个异常,我允许用户选择文件进行处理。该工具将读取文件的每一行并处理每一行,然后写入文件结果。
但我的问题是如何同时读取6个输入文件的第1行?还是第2行…第n行?
请帮忙。
更新
- 用户输入html链接>gt;处理新的html链接
- 用户输入标题>gt;处理新标题
- 用户输入描述>gt;以处理新的描述
- 用户输入图片链接以及其他链接和模板
我的工作是将所有用户输入处理并混合到一个文件中。
更新
工具运行良好,但在导出或写入结果文件时,引发异常。
这就是为什么我认为我需要逐行读取输入文件和写入结果。但问题是如何在同一时间读取4-6个文件的同一行。例如:读取文件的第1行(共6行)?
问题是内存不足。就这么简单。您的数据量超过了您的RAM。文件的大小是多少?将它们相加,然后将其与你电脑上的内存进行比较。
请记住,c#字符串是Unicode,每个字符16位。您的文本文件可能是每个字符8位,但在内存中始终是16位。
我以前也遇到过类似的问题,我可以通过将工作分成批次来解决:
- 读取输入1至6
- 合并数据
- 在磁盘上的文件中写入几行
- 在磁盘上的文件上再追加几行
- 重复步骤4和步骤5,直到步骤2中的所有数据都写入磁盘上的文件
完成!
我不确定我是否理解你的问题,因为它听起来很琐碎,但我们会通过查看某个问题是否是答案来了解困扰你的地方,如果不是,为什么。
所以,这是我的建议。它假设您有相同行数的文件(假设您说过要合并文件的内容)。当然,你的文件可能应该单独处理,但你会明白的。
List<System.IO.StreamReader> files = new List<System.IO.StreamReader>
{
new System.IO.StreamReader("c:''file1.txt"),
new System.IO.StreamReader("c:''file2.txt"),
new System.IO.StreamReader("c:''file3.txt")
};
int lineCount = 0;
bool hasMore = true;
while(hasMore)
{
foreach(var file in files)
{
string fileLine = file.ReadLine();
hasMore = fileLine != null;
//add your processing here...
}
lineCount++;
}
file.Close();