是否可以逐行读取多个文件?

时间:2013-08-21 09:10:15

标签: c# file

我有处理文字的工具。工具有6个备忘录(memoEdit - devexpress)。但是当用户输入大文本(每个备忘录50-100k行)时,异常抛出错误内存不足

为避免此异常,我允许用户选择要处理的文件。工具将读取每行的文件并处理每一行,然后写入文件结果。

但我的问题是如何同时读取6输入文件的第1行?或第2行......行n?

请帮忙。

更新

  • 用户输入html链接>>处理新的HTML链接
  • 用户输入标题>>处理新标题
  • 用户输入说明>>处理新的描述。
  • 用户输入图片链接和其他链接和模板。

我的工作是处理并将所有用户输入混合到一个文件中。

更新

工具工作正常,但在导出或写入结果文件时,抛出异常。

这就是为什么我认为我需要逐行读取输入文件和写入结果。但问题是如何同时读取4-6文件同一行。例如:读取6个文件的第1行?

3 个答案:

答案 0 :(得分:1)

问题是你的内存不足。就这么简单。您的数据量超过了您的RAM。文件大小是多少?添加它们然后将它与PC上的内存进行比较。

请记住,c#字符串是Unicode - 每个字符16位。您的文本文件可能是每个字符8位,但在内存中总是16位。

答案 1 :(得分:1)

我遇到过类似的问题,之前我可以通过将工作分成几批来解决这个问题:

  1. 读取输入1到6.
  2. 合并数据
  3. 在磁盘上的文件中写几行。
  4. 在磁盘上的文件中再添加几行。
  5. 重复步骤4和步骤5,直到步骤2中的所有数据都写入磁盘上的文件。
  6. 完成!

答案 2 :(得分:1)

我不确定我是否接受了你的问题,因为这听起来微不足道,但我们会看到一些令人不安的问题,看看是否有答案,如果没有 - 为什么。

所以,这是我的建议。它假设您有相同行数的文件(假设您说您合并了文件的内容)。当然,您的文件应该单独进行单独处理,但您会明白这一点。

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