有人问到一个问题:
一个文本里有多行,如:
geafd1
bragd2
beree3
beaee4
dfefa/
fdasf5
feafd/
..
..
怎么把结尾是“/”的行删掉?
其实,解决思路很简单,将文本逐行读取到数组中,再遍历数组判断即可。于是,某个项目中常用方法:
方法一:
这也是微软提供的示例,在实际使用中发现,有时候,该方法的缺陷在于不能读取完整地读取文件所有行。怀疑是缓冲区过小。查MSDN说明:
StringReader
.
ReadLine 方法将行定义为后面跟有下列符号的字符序列:换行符(“\n”)、回车符(“\r”)或后跟换行符的回车符(“\r\n”)。
所产生的字符串不包含终止回车符和/或换行符。
如果已到达基础字符串的结尾,则返回值为 null
。
http://msdn.microsoft.com/zh-cn/library/system.io.streamreader.readline.aspx
我的理解:如果由于编码的问题,导致读取异常,也就是无法读取行标志时,可能会认为已到文件结尾而中断下行的读取。这也解释了为什么会有时读取不完整的原因。
如何避免这个问题呢?可以使用方法二:
方法二:
这里使用
StreamReader的Peek()方法,依据MSDN的说明,
Peek
方法返回一个整数值以便确定是否到达文件末尾,或发生其他错误。
这样一来,用户在将返回值强制转换为 Char
类型之前就可以首先检查该值是否为 -1。
换句话说,它不需要先转换字符,即可返回是否达到文件末尾。
http://msdn.microsoft.com/zh-cn/library/system.io.streamreader.peek.aspx
其实还可以用第三种方法:
File的
ReadAllLines 方法 (String)
方法三:
MSDN说明:
此方法打开一个文件,读取文件的每一行,然后将每一行添加为字符串数组的一个元素。
然后它关闭文件。
根据定义,一行就是一个后面跟有下列符号的字符序列:回车符(“\r”)、换行符(“\n”)或回车符后紧跟一个换行符。
所产生的字符串不包含终止回车符和/或换行符。
此方法尝试根据现存的字节顺序标记来自动检测文件的编码。
可检测到编码格式 UTF-8 和 UTF-32(包括 big-endian 和 little-endian)。
http://msdn.microsoft.com/zh-cn/library/s2tte0y1.aspx
方法三也可能存在与方法一类似的缺陷。
邀月注:本文版权由邀月和CSDN共同所有,转载请注明出处。
助人等于自助!
3w@live.cn
分享到:
相关推荐
//获取页面 private string CreateRequest(string strURL) { ... using (var newStream = new StreamReader(stream, Encoding.GetEncoding("GBK"))) { return newStream.ReadToEnd(); } } }
1. **文件路径**:确保文件路径正确无误,否则将抛出异常。 2. **文件编码**:如果文件使用了特定的编码(例如UTF-8),需要在创建`StreamReader`时指定相应的编码,否则可能会出现乱码。 3. **资源管理**:使用完`...
request.Proxy = null;//不使用代理 request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; outstream = request.GetRequestStream(); outstream.Write(data, 0, ...
public partial class Form1 : Form { #region 全局变量 Image im; Bitmap bm; Bitmap empt; ArrayList arrrect = new ArrayList(); //ArrayList emptpt = new ArrayList(); ArrayList arrpic = new ...
StreamReader din = File.OpenText(OpenFile.FileName); String str; while ((str=din.ReadLine())!=null) { textBox1.Text = textBox1.Text + str + "\r\n"; } din.Close(); this.Text = Path.GetFileName...
System.IO.StreamReader errorreader = pro.StandardError; pro.WaitForExit(1000); string result = errorreader.ReadToEnd(); if (!string.IsNullOrEmpty(result)) { result = result.Substring(result....
this.button1.Click += new System.EventHandler(this.button1_Click); // // groupBox1 // this.groupBox1.Controls.Add(this.tiplist); this.groupBox1.Controls.Add(this.select_type); ...
System.IO.StreamReader sr = new System.IO.StreamReader(responseStream, Encoding.UTF8); string content_start = sr.ReadToEnd(); textBox1.Text = content_start; tb_time.Text =tb_time .Text .Trim(); ...
1、修改源文件TrafficControl.js 2、//使百度地图交通状况支持https后台方法: [HttpGet] public void GetTrafficContol() { HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)...
System.IO.StreamReader a = new System.IO.StreamReader("upgrade.list"); bool up = true; string upfile = a.ReadLine(); while (up) { upfile = a.ReadLine(); if (upfile == null) up = false; else ...
ClientReader = new StreamReader(Stream); ClientWriter = new StreamWriter(Stream); txtServerIp.Enabled = false; btnConnect.Enabled = false; this.Text = "客户端 " + "正在与" + txtServerIp.Text.Trim...
StreamReader sr = new StreamReader(indexDirectory, true); string strStart = sr.ReadLine(); string strEnd = sr.ReadLine(); sr.Close(); DateTime dtStart = DateTime.Parse(strStart); DateTime dtEnd ...
--{valB_guid}-->" target="_blank" class="indexshop" title='ԭ<!--{valB_price}-->Ԫ'> <img src="business/images/buy_y.gif" width="18" height="13" border="0">ּ<!--{valprice}-->Ԫ <!--{next}--> ...
string strLine = m_streamReader.ReadLine(); while (strLine != null) { this.richTextBox1.Text += strLine + " "; strLine = m_streamReader.ReadLine(); } // 关闭StreamReader m_streamReader.Close(); ```...
1. **创建进程对象**: - 使用 `Process` 类创建一个新的进程实例。 - ```csharp Process myProcess = new Process(); ``` 2. **设置进程启动信息**: - 通过设置 `StartInfo` 属性来指定进程的启动方式。 - ...
`StreamReader`用于读取字符流,我们可以使用它的`ReadLine()`方法逐行读取文本文件。以下是一个示例代码: ```csharp FileStream fs = new FileStream("C:\\file.txt", FileMode.Open, FileAccess.Read); ...
- 循环读取:使用`StreamReader.ReadLine()`方法逐行读取文件直至文件结束。 #### 三、TXT文件写入 ##### 3.1 功能概述 这部分主要介绍如何向TXT文件中写入数据。函数`WriteTxt`接受两个参数:文件路径`strPath`和...
receiveString = user.commandSession.streamReader.ReadLine(); } catch(Exception ex) { if (user.commandSession.tcpClient.Connected == false) { AddInfo(string.Format("客户端({0}断开连接!)", user....
string strLine = m_streamReader.ReadLine(); while (strLine != null) { richTextBox1.Text += strLine + "\n"; strLine = m_streamReader.ReadLine(); } m_streamReader.Close(); ``` 这段代码展示了如何打开...