用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();
}
}
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();
}
}
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
{
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 之后就退出循环了
{
rTxtBox.Text = fileLine;
fileLine = sRead.ReadLine();//该行注释后,可输出倒数倒数第一行
又读取一行
}
明白了吗
不是倒数第一,就是倒数第二看了半天了,代码没出什么问题啊。PS:rTxtBox 是 richTextBox
while ((fileLine = sRead.ReadLine()) != null)
{
text += fileLine+"/r/n";
}
rTxtBox.Text =text;
{
rTxtBox.Text = fileLine;
fileLine = sRead.ReadLine();//这里再用就读下一行,ReadLine函数读一次会自动跳转到下一行
}
{
rTxtBox.Text = fileLine;
fileLine = sRead.ReadLine();//该行注释后,可输出倒数倒数第一行
}改成:while ((fileLine = sRead.ReadLine()) != null)
{
rTxtBox.AppendText(fileLine+"\r\n");
}
谢谢 again!