将输入和输出流从一个文件操作到另一个文件

时间:2015-04-04 17:09:36

标签: c# sorting text streamreader streamwriter.write

我每隔几秒就有一个新文件,如下所示:

  

23
  45个
  21个
  1
  9
  23个
  42个
  22个
  40个
  11个
  33个
  32个
  18个
  11个
  12个
  32个
  22个
  7
  37个
  30

在要读取的文本文件中,每行有一个数字,介于1-40之间。这些文件每分钟生成几次。

我正在尝试使用StringReaderStringWriter进行升序排序。我的逻辑必须有缺陷,因为我打算将此文件发送到此文件中。我将true作为append参数传递,但我的排序文件中仍然没有填充任何内容。

目标是从文本文件中读取for循环,该循环遍历1-40个int值并将其与读取的文件中的每个字符串或int进行比较,并在从读取文件中找到该文件时将其复制到按排序顺序排序的文件。

我已经看了一段时间它应该工作但不会。使用文件读取器/编写器类或流读取器/写入器会比我更容易吗?

public static void ProcessDirectory()
{
    int variable1;
    StreamReader readToSort = new StreamReader(@"C:write.txt");
    StreamWriter writeSorted = new StreamWriter(@"C:Sorted_File.txt", true);

    for (int i = 1; i > 41; i++)
    {
        variable1 = (readToSort.Read());

        while (!readToSort.EndOfStream)
        {
            if (variable1 == i)
            {
                writeSorted.Write(i.ToString() + "\n");
            }
        }

        MessageBox.Show("processing #" + variable1);
    }

    readToSort.Close();
    writeSorted.Close();
}

1 个答案:

答案 0 :(得分:0)

为了确保我正确理解您要解决的问题,我根据您的问题及其下方的评论制作了一系列要求。

  • 您的输入包含几千兆字节的文本文件,因此无法完全加载到内存中
  • 这些文本文件仅包含数值,每个值都在各自的行中
  • 这些数值需要按排序顺序写入另一个输出文件

我不完全清楚你的输入是什么,所以你可能需要在这里纠正我。您是否需要组合多个(较小的)输入文件,对组合内容进行排序,并将其输出到单个(较大的)文件?

示例:

  • 输入:file1_unsorted.txt(6GB),file2_unsorted.txt(6GB)
  • 输出:file1_and_file2_sorted.txt(12GB)

如果是这样,每个单独的文件是否足够小以便加载到内存中(但不是整合的?)

示例(假设1GB RAM):

  • 输入:file1_unsorted.txt(600MB),file2_unsorted.txt(600MB),...,file10_unsorted.txt(600MB)
  • 输出:file1_through_file10_sorted.txt(6GB)

或者,每个单独的输入文件是否足够大以至于它不适合内存,并且这些文件是否需要分类到相应的输出文件?

示例:

  • 输入:file_unsorted.txt(6GB)
  • 输出:file_sorted.txt(6GB)

假设您的(未排序的)输入和(已排序)输出文件都太大而无法放入内存,您需要一种方法来以块的形式对这些文件的内容进行排序。您要查找的关键字是外部排序

这是关于CodeProject的一个很好的例子(包含源代码和解释):Sorting Huge Text Files

您可能需要查看一些类似的StackOverflow问题:Reading large text files with streams in C#

如果您需要有关实际实施的任何帮助,请提供有关输入和(所需)输出的更多信息。文件本身显然太大而无法上传 - 带有输入和输出文件的目录的屏幕截图也可以使用。然后我(和其他人)可以看到每个文件的大小以及它们需要聚合的程度(如果有的话)。