流 Stream 事例

  多数应用程序的基本任务是操作数据,这就需要对数据进行访问和保存,即对数据进行读/写操作,用程序访问一个文本文件的操作叫做"读";对文件文件的内容进行修改后保存这些修改的操作被称为"写".
C#提供了一个名为System.IO的名称空间,用于对文本和流进行处理。
IO名称空间包括的类主要用于对文件和数据进行读/写,并提供基本的文件和目录支持
C#中的流处理:
BinaryReader 和 BinaryWrite类,以二进制格式操作数据
  Close() 关闭当前阅读器及基础流
  Read() 从基础流中读取字符并前移流的当前位置
  ReadDecimal() 从当前流中读取十进制数值,并将该流的当前位置前移16个字节
  ReadByte() 从当前流中读取下一个字节,并将在流中的位置向前移动1个字节
Stream类
Stream类是IO名称空间中最重要的类之一,它是派生FileStream、MemoryStream和BufferedStream等不同类的抽象类
MemoryStream类用于向内存(而不是磁盘)读写数据
  Read() 读MemoryStream并装值写入缓冲区
  ReadByte() 从MemoryStream读一个字节
  Write() 从缓冲区向MemoryStream写值
  WriteByte() 从缓冲区向MemoryStream写一个字节
  WriteTo() 将此内存流的内容写入别一个内存流
BufferedStream类用于对缓冲区进行读/写。有两个构造函数
public BufferedStream(Stream stName);
public BufferedStream(Stream stName, int bsize); // bsize表示缓冲区大小
 
static void Main(string[] args)
        {
            MemoryStream memStr = new MemoryStream();
            BufferedStream buffStr = new BufferedStream(memStr);
            buffStr.WriteByte((byte)100);
            buffStr.Position = 0; //取得memStr的当前位置Positon属性为0,以便buffStr的当前位置设置为流的开始
            byte[] arrb = { 1, 2, 3 };
            buffStr.Read(arrb, 0, 1); // 用流的当前位置的值填充字节数组arrb
            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine("这个值是{0}", arrb[i]);
            }
            Console.WriteLine("ReadByte()的返回值是{0}", buffStr.ReadByte()); // 返回-1表示流的末尾
            Console.ReadKey();
        }
 
FileStream类
FileStream 类用于对文件执行读/写操作,Read()和Write()方法用于读/写操作
FileStream类构造函数有许多重写形式,以方便创建该类的实例
  FileStream(string FilePath,FileMode)
  FileStream(stirng FilePath,FileMode,FileAccess)
  FileStream(string FilePath,FileMode,FileAccess,FileShare)
FileMode为enum类型,其值如下:
  Append:打开一个文件并查找到文件末尾,以便能够附加新的数据,如果文件不存在,则新建一个文件
  Create:用指定名称新建一个文件,如果存在具有相同名称的文件,则覆盖旧文件
  CreateNew:新建一个文件
  Open:打开一个文件,指定文件必须存在
  OpenOrCreate:与Open类似,只是指定文件不存在时,新建一个 
  Truncate:根据此枚举,打开指定文件并将之截断为0字节(大小为0字节),文件必须存在
FileAccess枚举值:Read / Write / ReadWrite
FileShare枚举值:
  None:谢绝共享当前文件。文件关闭前,打开该文件的任何请求都将失败
  Read:只能对文件进行读取操作
  Write:可以对文件进行写入操作
  ReadWrite:可以进行对文件的读写和写入两种操作
 
static void Main(string[] args)
        {
            Console.WriteLine("输入文件的名称:");
            string filename = Console.ReadLine();
            FileStream fileStr = new FileStream(filename, FileMode.OpenOrCreate);
            BinaryWriter binWrt = new BinaryWriter(fileStr);
            for (int i = 0; i < 20; i++)
            {
                binWrt.Write(i);
            }
            binWrt.Close();
            fileStr.Close();
            fileStr = new FileStream(filename, FileMode.Open, FileAccess.Read);
            BinaryReader binRead = new BinaryReader(fileStr);
            for (int i = 0; i < 20; i++)
            {
                Console.WriteLine(binRead.ReadInt32());
            }
            binRead.Close();
            fileStr.Close();
            Console.ReadKey();
        }
 
TextReader类
TextReader类是StreamReader和StringReader类的抽象基类,可用于读取有序的字符序列
  Read() 读取输入流中的下一个字符或下一组字符
  ReadLine() 从当前流中读取一行字符并将数据作为字符串返回
  ReadToEnd() 从流的当前位置到末尾读取流
 
class Program
    {
        static string ans = "y";
        static void Main(string[] args)
        {
            Console.WriteLine("1.读取文件");
            Console.WriteLine("2.读取字符串");
            try
            {
                Reading();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }
        }
        static void Reading()
        {
            if (ans == "Y" || ans == "y")
            {
                Console.Write("输入你的选择[1/2]:");
                int choice = Convert.ToInt32(Console.ReadLine());
                if (choice == 1)
                {
                    Console.WriteLine("输入文件名:");
                    string filename = Console.ReadLine();
                    if (!File.Exists(filename))
                    {
                        Console.WriteLine(filename + "不存在!");
                        return;
                    }
                    StreamReader sr = File.OpenText(filename);
                    string input;
                    while ((input = sr.ReadLine()) != null)
                    {
                        Console.WriteLine(input);
                    }
                    Console.WriteLine("已达到流末尾。");
                    sr.Close();
                    Console.Write("要继续吗?[Y/N]:");
                    ans = Console.ReadLine();
                    Reading();
                }
                else if (choice == 2)
                {
                    Console.Write("输入字符串:");
                    string str = Console.ReadLine();
                    char[] b = new char[str.Length];
                    StringReader sr = new StringReader(str);
                    sr.Read(b, 0, str.Length);
                    Console.WriteLine(b);
                    Console.WriteLine("要继续吗[Y/N]:");
                    ans = Console.ReadLine();
                    Reading();
                }
                else
                {
                    Console.WriteLine("输入1或2作为选择:");
                }
            }
        }
    }
 
TextWrite类
TextWrite类用于编写有序字符的类的抽象基类。StreamWriter和StringWriter类是TextWriter类的两个派生类
  Write() 将数据写入流
  WriteLine() 将数据写入流,并在结尾标记结束符
  StringWriter类用于装数据写入字符串,与StreamWriter类类似,区别仅在于它是向字符串(而不是向流)写入
 
class Program
    {
        static string ans = "y";
        static void Main(string[] args)
        {
            Writing();
        }
        static void Writing()
        {
            if (ans == "Y" || ans == "y")
            {
                Console.WriteLine("输入文件名:");
                string filename = Console.ReadLine();
                if (!File.Exists(filename))
                {
                    Console.WriteLine(filename + "不存在!");
                    return;
                }
                StreamWriter sr = File.AppendText(filename);
                Console.Write("输入要写入的字符串:");
                string str = Console.ReadLine();
                sr.WriteLine(str);
                sr.Close();
                Console.Write("要继续吗?[Y/N]:");
                ans = Console.ReadLine();
                Writing();
            }
        }
    }

posted on 2015-05-10 16:42  阿兴的平凡世界  阅读(93)  评论(0)    收藏  举报

导航