A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 康晓璞 中级黑马   /  2013-2-26 00:21  /  1480 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 康晓璞 于 2013-2-26 08:33 编辑

1System.IO 模型基础
System.IO模型提供了一个面向对象的方法来访问文件系统。
System.IO提供了很多针对文件,文件夹得操作功能,特别是以流打方式对各种数据进行访问,这种方式不但灵活,而且保证编程接口的统一。
System.IO的实现包含在System.IO命名空间中,该命名空间包含允许读写文件和数据流的类型以及提供基本文件和文件夹支持的各种类,也就是说System.IO模型是一个文件操作类库,包含的类可用于文件的创建,读/写,复制,移动和删除等操作。
2. 文件编码
文件编码也称为字符编码,用于指定在处理文本时如何表示字符。
一种编码可能由于另一种编码,主要取决于能处理或不能处理那些语言,不过首选的是Unicode.
编码是将一组Unicode字符转换为一个字节序列的过程
,解码时一个反向操作过程,将一个编码字节序列转换为一组unicode字符。
3.C# 文件流
C#将文件看成是顺序的字节流,也称为文件流。文件流失字节序列的抽象概念
文件可以看成是存储在磁盘上的一系列二进制字节信息,C#用文件流对其进行输入,输出操作。
Stream类是所有流的基类,由它派生出文件流(FileStream)和缓冲流(BufferStream).
在System.IO模型中,文件操作的基本方式是:用File类打开操作系统文件,建立对应的文件流即FileStream对象
用StreamReader/StreamWriter类提供的方法对该文件流(文本文件)进行读写
或用BinaryReader/BinaryWriter类提供的方法对该文件流(二进制文件)进行读写。
4. 文件夹操作
Directory类提供了文件夹操作的方法,Directory类内的方法是共享的,无需创建对象实体即可使用。
DireatoryInfo类不许创建对象实体才能使用其方法。
(1)判断目录是否存在Exists
(2)目录的创建  CreateDirectory
(3)目录的删除 Delete
(4)移动目录 Move
(5)返回目录的属性
      目录的创建的日期和时间 GetCreationTime
    上次访问目录的日期和时间 GetLastAccessTime
上次写入目录的时日期和时间 GetLastWriteTime
  (6)目录结构
      返回指定目录的子目录的名称 GetDirecrories
返回指定目录的文件的名称 GetFiles
返回指定目录中所有文件和子目录的名称 GetFileSystemEntries
返回指定目录的父目录 GetParent
(7) 目录位置
  返回“驱动器:\”逻辑驱动器的名称。GetLogicalDrives
返回应用程序的当前工作路径 GetcurrentDirectory
5.文件操作
File类提供了文件操作的方法,并协助创建FileStream对象。同样FileInfo也提供了文件操作的方法,但须实例化
     (1) 判断存在 Exists
      (2)创建文件 create createText
       (3) 删除文件 Delete
       (4)复制文件 copy
       (5)打开文件,将文件内容读入字符串或字符串数组。
          ReadAllBytes
        ReadAllLines
         ReadAllText
          (6) 打开文件读取
             OpenRead
            OpendText
          (7)打开文件写入
               OpenWrite
           (8)以追加方式打开
               AppendText ,AppendAllText
       (9) 移动文件 move
       (10) 文件属性
           上次打开,上次写入,创建等日期和时间。
6. FileStream类
使用FileStream类可以产生文件流,以便对文件进行读取,写入,打开和关闭操作,
  最常用构造函数
  public FilesSream(string path,FileMode mode)
  path:文件的相对路径或绝对路径
  FileMode:确定如何打开和创建文件。
Append:追加,或创建新的文件。
Create:创建新的文件,如果文件存在,将会改写。
CreateNew:创建新文件。
Open:打开现有文件。
常用方法:
读:
Read:
ReadByte:
写:
WriteByte:
Write:
Seek:将流的当前位置设置为给定值。
Flush:清楚该流的所有缓冲区,使得所有缓冲的数据都被写入到基础设备中。
7. 文本文件的操作
文本文件的操作是通过StreamReader和StreamWriter两个类提供的方法来实现的。
(1) StreamReader类
     所有FileStream类时,其数据时字节流,只能进行字节的读写。
     System.IO模型又提供了StreamReader类和StreamWriter类,它们分别提供了文本数据的读写方法。
  StreamReader以一种特定的编码从字节流中读取字符。
常用构造函数:
StreamReader(Stream):为指定的流初始化StreamReader类的新实例。
StreamReader(String):为指定的文件名初始化StreamReader类的新实例。
StreamReader(Stream,Encoding):用指定的字符编码为指定的流初始化StreamReader类的新实例。
StreamReader(String,Encoding):y用指定的字符编码为指定的文件名初始化StreamReader类的新实例
Close:关闭StreamReader对象和流,并释放与读取器关联的所有系统资源。
Peek:返回下一个可用的字符,但不使用它。
Read:
ReadBlock:
ReadLine:
ReadToEnd;
StreamReader 读取数据过程:先建立一个文件流,在通过StreamReader类的方法,读取流。
例如:
string str="";
FileStream fs=File.OpenRead(@"F:\test.txt");
StreamReader sr=new StreamReader(fs);
fs.Seek(0,SeekOrigin.Begin);
while(sr.Peek()>-1)
{
   mystr+=sr.ReadLine()+"\r\n";
}
sr.close;
fs.close;
(2) StreamWriter类
  StreamWriter类以一种特定的编码输出字符,常用默认构造函数如下:
StreamWriter(Stream):用UTF-8编码及默认缓冲区大小为指定的流初始化StreamWriter类的一个新实例。
StreamWriter(String)用默认编码和缓冲区大小为指定路径上的指定文件初始化StreamWriter类的新实例。
StreamWriter(String,Encoding)用指定的编码及默认缓冲区大小为指定的流初始化StreamWriter类的一个新实例。
常用方法及说明:
close():关闭当前StreamWriter对象和基础流。
Write():写入流。
WriteLine():写入重载函数指定的某些数据,后跟行结束符。
写入数据过程:
建立一个写入文件流,然后通过StreamWriter的write/WriteLine方法将数据写入该文件流。
8.  二进制文件操作

二进制文件操作是通过BinaryReader和BinaryWriter两个类提供的方法来实现的。
(1)BinaryReader 类以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。
常用构造函数:
BinaryWriter():初始化向流中写入的BinaryWriter类的新实例。
BinaryWriter(Stream):基于所提供的流,用UTF8作为字符串编码来初始化BinaryWriter类的新实例;
BinaryWriter(Stream,Encoding):基于所提供的流,用UTF8作为字符串编码来初始化BinaryWriter类的新实例;
常用方法:
close:关闭当前的BinaryWriter和基础流。
Seek:设置当前流中的位置。
Write:将值写入当前流。
(2)BinaryReader类
BinaryReader类用特定的编码将基元数据类型读作二进制,数据读取过程与StreamReader类相似,只是数据格式不同
常用构造函数:
BinaryReader(Stream):基于所提供的流,用UTF8Encoding初始化BinaryReader类的新实例。
BinaryReader(Stream,Encoding):基于所提供的流和特定的编码,用UTF8Encoding初始化BinaryReader类的新实例。

常用方法:
close:关闭当前阅读器及基础流。
PeekChar:返回下一个可用的字符,并且不提升字节或字符的位置。
Read:从基础流中读取字符,并提升流的当前位置。
ReadBytes:从基础流中将Count个字符读入字节数组,并使当前位置提升Count个字节。






评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 岳珅 于 2013-2-26 01:04 编辑

我来补充几句。
目录操作
string[] drives = Directory.GetLogicalDrives();   //本地驱动器的名,如:C:\等
string path = Directory.GetCurrentDirectory();  //获取应用程序的当前工作目录
Path.GetFileName(@"c:\dir\file.txt");              //获取子目录的名字,result的结果是file.txt
Directory.GetFiles(路径及文件名)                     //获取指定目录中的文件名(文件列表)
DirectoryInfo di = new DirectoryInfo(@"f:\MyDir");      //构造函数创建目录
DirectoryInfo di=Directory.CreateDirectory(@"f:\bbs"); //创建对象并创建目录
if (di.Exists == false)                                    //检查是否存在此目录
di.Create();                                                //创建目录
DirectoryInfo dis = di.CreateSubdirectory("SubDir");    //以相对路径创建子目录
dis.Delete(true);                                         //删除刚创建的子目录
di.Delete(true);                                          //删除创建目录


文件操作
Directory.Delete(@"f:\bbs2", true); //删除目录及其子目录和内容(如为假不能删除有内容的目录包括子目录)
Directory.GetDirectories 方法 //获取指定目录中子目录的名称
string[] dirs = Directory.GetDirectories(@"f:\", "b*");
Console.WriteLine("此目录中以b开头的子目录共{0}个!", dirs.Length);
foreach (string dir in dirs) { Console.WriteLine(dir); }
Directory.GetFileSystemEntries //获取指定目录中的目录及文件名
Directory.GetLogicalDrives //检索此计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称,【语法同上】
Directory.GetParent //用于检索父目录的路径。
DirectoryInfo a = Directory.GetParent(path);
Console.WriteLine(a.FullName);Directory.Move //移动目录及其在内的所有文件
Directory.Move(@"f:\bbs\1", @"f:\bbs\2"); //将文件夹1内的文件剪到文件夹2内 文件夹2是刚创建的
Stream // 对字节的读写操作(包含对异步操作的支持) Reading Writing Seeking
BinaryReader和BinaryWriter // 从字符串或原始数据到各种流之间的读写操作
FileStream类通过Seek()方法进行对文件的随机访问,默认为同步
TextReader和TextWriter //用于gb2312字符的输入和输出
StringReader和StringWriter //在字符串中读写字符
StreamReader和StreamWriter //在流中读写字符
BufferedStream 为诸如网络流的其它流添加缓冲的一种流类型.
MemoryStream 无缓冲的流
NetworkStream 互联网络上的流

常用操作举例:
  1. //文本文件操作:创建/读取/拷贝/删除
  2. using System;
  3. using System.IO;
  4. class Test
  5. {
  6.    string path = @"f:\t.txt";
  7.    public static void Main()
  8.    {      
  9.       //创建并写入(将覆盖已有文件)
  10.       if (!File.Exists(path))
  11.       {         
  12.          using (StreamWriter sw = File.CreateText(path))
  13.          {
  14.             sw.WriteLine("Hello");
  15.          }
  16.       }
  17.       //读取文件
  18.       using (StreamReader sr = File.OpenText(path))
  19.       {
  20.         string s = "";
  21.         while ((s = sr.ReadLine()) != null)
  22.         {
  23.            Console.WriteLine(s);
  24.         }
  25.      }
  26.      //删除/拷贝
  27.      try
  28.      {
  29.         File.Delete(path);
  30.         File.Copy(path, @"f:\tt.txt");
  31.      }
  32.      catch (Exception e)
  33.      {
  34.         Console.WriteLine("The process failed: {0}", e.ToString());
  35.      }
  36.    }
  37. }
复制代码
  1. //流文件操作
  2. private const string name = "Test.data";
  3. public static void Main(String[] args)
  4. {
  5.     //打开文件()  ,或通过File创建立如:fs = File.Create(path, 1024)
  6.     FileStream fs = new FileStream(name, FileMode.CreateNew);
  7.     //转换为字节 写入数据(可写入中文)
  8.     Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
  9.     //字节数组,字节偏移量,最多写入的字节数
  10.     fs.Write(info, 0, info.Length);
  11.     w.Close();
  12.     fs.Close();
  13.     //打开文件
  14.     fs = new FileStream(name, FileMode.Open, FileAccess.Read);
  15.     //读取
  16.     BinaryReader r = new BinaryReader(fs);
  17.     for (int i = 0; i < 11; i++)
  18.     {
  19.         Console.WriteLine(r.ReadInt32());
  20.     }
  21.     w.Close();
  22.     fs.Close();
  23. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马