广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-05-04 21:21:22 次阅读 稿源:互联网
    广告
           很多时候,我们总是按照行的方式访问文本文件,使用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); 
        } 
        } 

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告