可以逐行读取多个文件吗

本文关键字:文件 读取 逐行 | 更新日期: 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. 读取输入1至6
  2. 合并数据
  3. 在磁盘上的文件中写入几行
  4. 在磁盘上的文件上再追加几行
  5. 重复步骤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();