.net:有没有办法从下到上读取txt文件?

时间:2010-02-10 23:03:47

标签: .net

  

可能重复:
  How to read a text file reversely with iterator in C#

我想知道是否有办法从下到上读取文本文件而没有任何性能损失,readLine,movenext方法,但反过来,在.net中是否可以这样做?

为了让事情变得更有趣,文本文件中有大约10万行,所以我不能用readall作弊,反过来......

更多细节:我有一组传入的字符串值,前缀为可以排序的int ID。不幸的是,我以错误的顺序获得这些ID。主要问题是字符串值的绝对数量,解决方案中没有RDBMS。所以我真的需要一种方法来存储字符串值,然后在处理过程中反转存储的顺序。文本文件浮现在脑海中,因为我目前还没有更好的解决方案。

提前致谢。

6 个答案:

答案 0 :(得分:1)

为什么不使用StreamReader类的ReadToEnd()方法,然后向后工作...... 不可否认它不是很漂亮但它有效,我使用字节数组创建MemoryStream实例,并使用指针hocus-pocus对StreamReader实例使用,以后向方式读取数据

unsafe
{
    byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes("Hello World! Foo wuz ere and so wuz bar");
    using (MemoryStream mStream = new MemoryStream(b))
    {
        string readStr;
        using (StreamReader sr = new StreamReader(mStream))
        {
            readStr = sr.ReadToEnd();
        }
        Console.WriteLine(readStr);
        fixed (char* beg = readStr)
        {
            char* p = beg + readStr.Length;
            while (p-- != beg)
            {
                Console.Write(*p);
            }
        }
    }
}

希望这有帮助, 最好的祝福, 汤姆。

答案 1 :(得分:0)

好吧,如果你愿意深入潜水,你可能会使用二进制阅读器并自己阅读......

你必须反过来找出行结尾,并弄清楚如何确保你有正确的编码。

我说的相当令人生畏。

答案 2 :(得分:0)

只是一般答案。如果有某种peek()方法,您可以将文件指针设置为filesize(或filesize - 1?),然后递减指针直到达到0.可能会有一些类在.NET中抽象出来。当然,您必须定义某种缓冲区大小(基本上定义您正在读取的文件的“块”的大小)。在这种情况下,上面的filesize - 1可能会变为filesize - bufferSize,您也会将文件指针递增bufferSize

答案 3 :(得分:0)

我认为你可以这样做可以使用PInvoke通过WINAPI来做到这一点。您需要创建一个内存映射文件,但只映射文件的末尾然后向上。

答案 4 :(得分:0)

因此,您以错误的顺序获取值,但希望以正确的顺序检索它们。也许是

Stack<T> 

适合你。

http://msdn.microsoft.com/en-us/library/3278tedw.aspx

表示同一任意类型的实例的可变大小后进先出(LIFO)集合。

答案 5 :(得分:-1)

StreamReader类的ReadBlock方法允许您从特定位置读取。不确定性能,您可能只想将其读入数组,然后将其反转。