none
c# 如何逐行读取txt文件的内容 RRS feed

答案

  • (函数名凭记忆写的,可能不准确,但差不多)

    string = File.ReadAll(filename); 获得整个文本

    string[] = File.ReadLines(filename); 获得整个文本,每一行作为一个string,放到数组,应该可以满足你的要求,除非文件特别大。

    如果你是因为文件比较大,所以要只读取其中某几行的话,那就只能建立一个file对象,一行行的读,不需要的跳过,直到读到你需要的行,因为“行”这个东西没有办法定位。

    如果这个需求量很大,可以考虑自己写一个索引文件,把行号对应的文件偏移量保存起来,下一次就直接seek到对应的位置开始读就可以了。


    霸王
    • 已标记为答案 BigBadBoy 2010年3月28日 14:29
    2010年3月28日 10:34
  • 那个是你得先读取过整个文件,把每行的位置都记录下来(也许需要放在另外一个文件中),之后如果你需要第100行,那么就去那个索引文件中找100行对应的偏移量,在到这个文件中去定位。当然前提是你这个文件没有被修改过。

    如果你这个文件不是十分的大(起码上百M),那么整个读一遍找需要的行还是可以接受的。


    霸王
    • 已标记为答案 BigBadBoy 2010年3月29日 13:45
    2010年3月29日 5:32

全部回复

  • (函数名凭记忆写的,可能不准确,但差不多)

    string = File.ReadAll(filename); 获得整个文本

    string[] = File.ReadLines(filename); 获得整个文本,每一行作为一个string,放到数组,应该可以满足你的要求,除非文件特别大。

    如果你是因为文件比较大,所以要只读取其中某几行的话,那就只能建立一个file对象,一行行的读,不需要的跳过,直到读到你需要的行,因为“行”这个东西没有办法定位。

    如果这个需求量很大,可以考虑自己写一个索引文件,把行号对应的文件偏移量保存起来,下一次就直接seek到对应的位置开始读就可以了。


    霸王
    • 已标记为答案 BigBadBoy 2010年3月28日 14:29
    2010年3月28日 10:34
  • (函数名凭记忆写的,可能不准确,但差不多)

    string = File.ReadAll(filename); 获得整个文本

    string[] = File.ReadLines(filename); 获得整个文本,每一行作为一个string,放到数组,应该可以满足你的要求,除非文件特别大。

    如果你是因为文件比较大,所以要只读取其中某几行的话,那就只能建立一个file对象,一行行的读,不需要的跳过,直到读到你需要的行,因为“行”这个东西没有办法定位。

    如果这个需求量很大,可以考虑自己写一个索引文件,把行号对应的文件偏移量保存起来,下一次就直接seek到对应的位置开始读就可以了。


    霸王


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    using System.IO;

    namespace ReadLine_Demo
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                string[] stringlines = File.ReadAllLines("d:\\a.txt",Encoding.Default);
                //foreach (string s in stringlines)
                //{
                //    this.richTextBox1.Text = s;
                //    MessageBox.Show(s);
                                   
                //}
                for (int i = 3; i < 12; i++)
                {
                    if (i < stringlines.Length)
                    {
                        this.richTextBox1.Text = stringlines[i].ToString();
                        MessageBox.Show(stringlines[i].ToString());
                    }
                }
            }
        }
    }

    问题解决了,谢谢.......

    你说的"

    如果你是因为文件比较大,所以要只读取其中某几行的话,那就只能建立一个file对象,一行行的读,不需要的跳过,直到读到你需要的行,因为“行”这个东西没有办法定位。

    "这个该怎么实现?

     

    还有那个seek()的偏移量如何获得,例如怎么获得第100行的偏移量?

    请教了.

    2010年3月28日 10:54
  • 用StreamReader啊

    Readline()

    2010年3月28日 13:48
  • 那个是你得先读取过整个文件,把每行的位置都记录下来(也许需要放在另外一个文件中),之后如果你需要第100行,那么就去那个索引文件中找100行对应的偏移量,在到这个文件中去定位。当然前提是你这个文件没有被修改过。

    如果你这个文件不是十分的大(起码上百M),那么整个读一遍找需要的行还是可以接受的。


    霸王
    • 已标记为答案 BigBadBoy 2010年3月29日 13:45
    2010年3月29日 5:32
  • split出来
    2010年4月3日 15:43
  • 因为文本换行,可以先把整个文本读取出来,然后用Spilt('/r')方法把所有字符串放到一个字符串数组中,然后再读取!

    2010年6月3日 3:07