用ReadLine()每次只能读取文件的最后一行或者倒数第二行,以下程序只能输出倒数第二行;这是为什么?请教!谢谢!
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 FileDialog
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private string fName;
        private void btn_01_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.InitialDirectory = "c:\\"; 
            openFileDialog.Filter = "文本文件|*.*|C#文件|*.cs|所有文件|*.*";
            openFileDialog.RestoreDirectory = true;
            openFileDialog.FilterIndex = 1;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                fName = openFileDialog.FileName;
                StreamReader sRead;
                sRead = File.OpenText(fName);
                sRead.BaseStream.Seek(0, SeekOrigin.Begin);
                String fileLine;
                this.rTxtBox.Text = "";
                while ((fileLine = sRead.ReadLine()) != null) 
                {
                    rTxtBox.Text = fileLine;
                    fileLine = sRead.ReadLine();//该行注释后,可输出倒数倒数第一行
                }
                sRead.Close();
            }
        }

解决方案 »

  1.   


    using System;
    using System.IO;class Test 
    {
        
        public static void Main() 
        {
            string path = @"c:\temp\MyTest.txt";
            try 
            {
                if (File.Exists(path)) 
                {
                    File.Delete(path);
                }            using (StreamWriter sw = new StreamWriter(path)) 
                {
                    sw.WriteLine("This");
                    sw.WriteLine("is some text");
                    sw.WriteLine("to test");
                    sw.WriteLine("Reading");
                }            using (StreamReader sr = new StreamReader(path)) 
                {
                    while (sr.Peek() >= 0) //这样的哇
                    {
                        Console.WriteLine(sr.ReadLine());
                    }
                }
            } 
            catch (Exception e) 
            {
                Console.WriteLine("The process failed: {0}", e.ToString());
            }
        }
    }
    http://msdn.microsoft.com/zh-cn/library/system.io.streamreader.readline.aspx
      

  2.   

    while ((fileLine = sRead.ReadLine()) != null) 
                    {
                        rTxtBox.Text = fileLine;
                        fileLine = sRead.ReadLine();//该行注释后,可输出倒数倒数第一行
                    }
    ------------------------------------
    举个例子说明一下文本文件为
    1
    2
    3
    4
    5
    --------------
    一共5行while ((fileLine = sRead.ReadLine()) != null) 执行这句之后 fileLine= 1当前光标挪到第二行然后执行 rTxtBox.Text = fileLine;输出第一行内容然后执行 fileLine = sRead.ReadLine(); 得到 fileLine= 2  
      
    然后 while ((fileLine = sRead.ReadLine()) != null) 
    得到 fileLine= 3
    然后执行 rTxtBox.Text = fileLine;输出3然后执行 fileLine = sRead.ReadLine(); 得到 fileLine= 4  
      
    然后 while ((fileLine = sRead.ReadLine()) != null) 得到 fileLine= 5然后执行 rTxtBox.Text = fileLine;然后输出  5在然后  fileLine 就为null 之后就退出循环了
      

  3.   

     while ((fileLine = sRead.ReadLine()) != null) 读取一行
                    {
                        rTxtBox.Text = fileLine;
                        fileLine = sRead.ReadLine();//该行注释后,可输出倒数倒数第一行
    又读取一行
                    }
    明白了吗
      

  4.   

    加入这个while (sr.Peek() >= 0)后,运行程序读取文件—— 程序就死掉了....... 
      

  5.   

    3、4楼。我的代码就是你们所说的那样写的啊。可是输出的结果总是只有 1 行。
    不是倒数第一,就是倒数第二看了半天了,代码没出什么问题啊。PS:rTxtBox  是 richTextBox
      

  6.   

    string text="";
    while ((fileLine = sRead.ReadLine()) != null) 
                    {
                        text += fileLine+"/r/n";
                        
                    }
    rTxtBox.Text =text;
      

  7.   

    while ((fileLine = sRead.ReadLine()) != null) //你这里用了ReadLine函数就已经读了一行
    {
        rTxtBox.Text = fileLine;
        fileLine = sRead.ReadLine();//这里再用就读下一行,ReadLine函数读一次会自动跳转到下一行
     }
      

  8.   

     rTxtBox.AppendText(sRead.ReadLine());
      

  9.   

    把你的代码:while ((fileLine = sRead.ReadLine()) != null) 
    {
           rTxtBox.Text = fileLine;
           fileLine = sRead.ReadLine();//该行注释后,可输出倒数倒数第一行
    }改成:while ((fileLine = sRead.ReadLine()) != null) 
    {
       rTxtBox.AppendText(fileLine+"\r\n");
    }
      

  10.   

    11楼不好意思,已经结贴,给不了分了。
    谢谢 again!