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

 更新时间:2007年04月28日 00:00:00   作者:  
       很多时候,我们总是按照行的方式访问文本文件,使用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); 
    } 
    } 

相关文章

  • WPF在自定义文本框中实现输入法跟随光标

    WPF在自定义文本框中实现输入法跟随光标

    本文主要为大家介绍了如何在WPF写一个自定义的文本框,并且能实现让输入法跟随光标。文中的示例代码讲解详细,需要的可以参考一下
    2022-02-02
  • .NET之生成数据库全流程实现

    .NET之生成数据库全流程实现

    这篇文章主要介绍了.NET之生成数据库全流程实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • .NET实现仓储Repository(AI)的操作方法

    .NET实现仓储Repository(AI)的操作方法

    仓储模式是一种在应用程序中使用的设计模式,它将数据访问逻辑与业务逻辑分离,通过仓储接口和仓储实现类,您可以定义和实现数据的增删改查操作,这篇文章主要介绍了.NET 实现仓储Repository(AI),需要的朋友可以参考下
    2023-09-09
  • asp.net获取真实ip的方法

    asp.net获取真实ip的方法

    这篇文章主要介绍了asp.net获取真实ip的方法,通过一个简单的自定义函数达到获取用户真实IP的功能,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • Visual Studio 2010配置OpenCV的方法

    Visual Studio 2010配置OpenCV的方法

    这篇文章主要为大家详细介绍了Visual Studio 2010配置OpenCV的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 详解GridView自带的编辑删除更新功能

    详解GridView自带的编辑删除更新功能

    本文主要介绍了GridView自带的编辑、删除、更新功能实现的方法。具有一定的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • Entity Framework使用LINQ操作实体

    Entity Framework使用LINQ操作实体

    本文详细讲解了Entity Framework使用LINQ操作实体的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • sqlserver 批量数据替换助手V1.0版发布

    sqlserver 批量数据替换助手V1.0版发布

    前段时间网站被挂马,数据库表中很多文本字段都被加上了一段js脚本。修复完程序漏洞之后便开始着手清理这些被注入的数据,其间参考了一些网上的方法,大都是写一个存储过程进行一个表一个表逐一清理。
    2011-10-10
  • ASP.NET Core集成Apollo(阿波罗)

    ASP.NET Core集成Apollo(阿波罗)

    这篇文章介绍了ASP.NET Core集成Apollo的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • ASP.NET Eval 求值运算的一些用法

    ASP.NET Eval 求值运算的一些用法

    ASP.NET Eval 求值运算的一些用法,需要的朋友可以参考下。
    2011-10-10

最新评论