Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > C#/.NET技巧

asp. net下使用foreach简化文本文件的访问。

来源:中文源码网    浏览:347 次    日期:2024-03-26 10:09:14
【下载文档:  asp. net下使用foreach简化文本文件的访问。.txt 】


asp. net下使用foreach简化文本文件的访问。
很多时候,我们总是按照行的方式访问文本文件,使用foreach语句能够极大地简化访问逻辑:例如: foreach (string line in new LineReader(”c:\abc.txt”)) Console.WriteLine(line); 完整代码如下: using System; using System.IO; using System.Text; using System.Collections; namespace Forks.Utils.IO { public struct LineReader : IDisposable { public LineReader(string file, Encoding encoding) : this(file, encoding, false) { } public LineReader(string file, Encoding encoding, bool ignoreBlankLines) : this(new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read), encoding, ignoreBlankLines) { } public LineReader(Stream stream, Encoding encoding) : this(stream, encoding, false) { } public LineReader(Stream stream, Encoding encoding, bool ignoreBlankLines) : this(new StreamReader(stream, encoding), ignoreBlankLines) { } public LineReader(TextReader reader) : this(reader, false) { } TextReader mReader; bool mIgnoreBlankLines; public LineReader(TextReader reader, bool ignoreBlankLines) { mReader = reader; mIgnoreBlankLines = ignoreBlankLines; mCurrent = null; } public LineReader GetEnumerator() { return this; } public void Reset() { throw new NotSupportedException("LineReaderÖ»ÄܶÁÈ¡Ò»´Î"); } string mCurrent; public string Current { get { return mCurrent; } } public bool MoveNext() { do { mCurrent = mReader.ReadLine(); }while (mIgnoreBlankLines && mCurrent != null && mCurrent.Length == 0); return mCurrent != null; } public void Dispose() { mReader.Close(); } } } 测试代码: using System; using System.IO; using System.Text; using NUnit.Framework; using Forks.Test; namespace Forks.Utils.IO { [TestFixture] public class LineReaderTest { const string TestLines = @"abc asd ewr afa e start with blanks end with blanks ºº×Öabc123!@# end of text!"; [Test] public void ReadFromReader() { doTest(new LineReader(new StringReader(TestLines))); } [Test] public void ReadFromFile() { string file = Path.GetTempFileName(); try { StringUtil.SaveToFile(TestLines, file, Encoding.GetEncoding("gb2312")); doTest(new LineReader(file, Encoding.GetEncoding("gb2312"))); } finally { FileUtil.SafeDelete(file); } } [Test] public void ReadFromStream() { string file = Path.GetTempFileName(); try { StringUtil.SaveToFile(TestLines, file, Encoding.GetEncoding("gb2312")); using (Stream stream = new FileStream(file, FileMode.Open)) doTest(new LineReader(stream, Encoding.GetEncoding("gb2312"))); } finally { FileUtil.SafeDelete(file); } } void doTest(LineReader reader) { StringBuilder sb = new StringBuilder(); foreach (string line in reader) sb.Append(line + Environment.NewLine); Assert.AreEqual(TestLines + Environment.NewLine, sb.ToString()); } [Test] public void IgnoreBlankLine() { foreach (string line in new LineReader(new StringReader(TestLines), true)) Assert.IsTrue(line.Length != 0); } } }

相关内容