using System.IO;
-------------------
string strLine="";
string[]strArray;
char[]charArray=new char[]{','};
FileStream aFile=new FileStream("cardlog.txt",FileMode.Open);
StreamReader sr=new StreamReader(aFile);
strLine=sr.ReadLine();
while(strLine!=null)
{
strArray=strLine.Split(charArray);
//检查一下此卡是否有对应的学生,过掉没有注册的卡
if(!IsCanIgnore(strArray[0].Trim(),strArray[1].Trim()))
{
//刷卡重复,同时上
Timecard timecard=new Timecard();
timecard.IDNumber=strArray[0].Trim();
timecard.BrushDate=DateTime.Parse(strArray[1].Trim());
timecards.Add(timecard);
}
strLine=sr.ReadLine();
}
sr.Close();
return true;

解决方案 »

  1.   

    使用System.IO.TextReader
    TextReader 是为字符输入设计的,而 Stream 类是为字节输入和输出设计的,BinaryReader 类是为以二进制(不是以文本)形式读取基元类型设计的。
    public virtual int Read(char[], int, int);
    //从当前流中读取一行字符并将数据作为字符串返回。
    public virtual int Read(
       in char[] buffer,
       int index,
       int count
    );
    参数
    buffer 
    此方法返回时,包含指定的字符数组,该数组的 index 和 (index + count - 1) 之间的值由从当前源中读取的字符替换。 
    index 
    buffer 中开始写入的位置。 
    count 
    最多读取的字符数。如果在将 count 个字符读入 buffer 之前已到达流的末尾,则当前方法将返回。 
    返回值
    已读取的字符数。该数小于或等于 count,具体取决于流中是否有可用的数据。如果调用此方法时没有更多的字符留下可供读取,则此方法返回 0。异常
    异常类型 条件 
    ArgumentNullException buffer 为空引用(Visual Basic 中为 Nothing)。 
    ArgumentException 缓冲区长度减去 index 小于 count。 
    ArgumentOutOfRangeException index 或 count 为负。 
    IOException 发生 I/O 错误。 
      

  2.   

    using System; 
    using System.IO; namespace ConsoleApplication2 

     /// <summary> 
     /// Summary description for Class2. 
     /// </summary> 
     public class Class1 
     { 
      private const string FILE_NAME="MyFile.txt"; 
      public static void Main(String[] args) 
      {    
       if(!File.Exists(FILE_NAME)) //如果不文件存在,则抛出异常 
       { 
        Console.WriteLine("{0} does not exist!",FILE_NAME); 
       } 
        
       StreamReader sr=File.OpenText(FILE_NAME); 
       String input; 
       while((input=sr.ReadLine())!=null) 
       { 
        Console.WriteLine(input); 
       } 
       Console.WriteLine("The end of the Stream has been reched."); 
       sr.Close(); 
      } 
     } 

      

  3.   

    StreamReader 旨在以一种特定的编码输入字符,而 Stream 类用于字节的输入和输出。使用 StreamReader 读取标准文本文件的各行信息。除非另外指定,StreamReader 的默认编码为 UTF-8,而不是当前系统的 ANSI 代码页。UTF-8 可以正确处理 Unicode 字符并在操作系统的本地化版本上提供一致的结果。默认情况下,StreamReader 不是线程安全的。有关线程安全包装的信息,请参阅 TextReader.Synchronized。StreamReader.Read (char[], int, int) 和 StreamWriter.Write (char[], int, int) 读写由 count 参数指定的字符数。这些区别于 BufferedStream.Read 和 BufferedStream.Write,后两者读写由 count 参数指定的字节数。仅将 BufferedStream 方法用于读写字节数组元素的整型数。注意   读取 Stream 时,使用大小与流的内部缓冲区相同的缓冲区会更有效。
    StreamReader 概述公共构造函数
    StreamReader 构造函数 已重载。为指定的流初始化 StreamReader 类的新实例。 公共字段
    Null 空流周围的 StreamReader。 公共属性
    BaseStream 返回基础流。 
    CurrentEncoding 获取当前 StreamReader 正在使用的当前字符编码。 公共方法
    Close 已重写。关闭 StreamReader 并释放与阅读器关联的所有系统资源。 
    CreateObjRef(从 MarshalByRefObject 继承) 创建一个对象,该对象包含生成用于与远程对象进行通讯的代理所需的全部相关信息。 
    DiscardBufferedData 允许 StreamReader 丢弃其当前数据。 
    Equals(从 Object 继承) 已重载。确定两个 Object 实例是否相等。 
    GetHashCode(从 Object 继承) 用作特定类型的哈希函数,适合在哈希算法和数据结构(如哈希表)中使用。 
    GetLifetimeService(从 MarshalByRefObject 继承) 检索控制此实例的生存期策略的当前生存期服务对象。 
    GetType(从 Object 继承) 获取当前实例的 Type。 
    InitializeLifetimeService(从 MarshalByRefObject 继承) 获取控制此实例的生存期策略的生存期服务对象。 
    Peek 已重写。返回下一个可用的字符,但不使用它。 
    Read 已重载。已重写。读取输入流中的下一个字符或下一组字符。 
    ReadBlock(从 TextReader 继承) 从当前流中读取最大数量的字符并从索引开始将该数据写入缓冲区。 
    ReadLine 已重写。从当前流中读取一行字符并将数据作为字符串返回。 
    ReadToEnd 已重写。从流的当前位置到末尾读取流。 
    ToString(从 Object 继承) 返回表示当前 Object 的 String。 
      

  4.   

    look this:http://chs.gotdotnet.com/quickstart/howto/default.aspx