.Net学习 第2季06 C#面向对象 Path类 File类 FileStream类 StreamReader/StreamWriter类

.Net 视频学习第2季 C#面向对象

 

面向对象 Path类 File类 FileStream类 StreamReader/StreamWriter类

Path类,命名空间System.IO,静态类

Path.GetFileName(str),返回文件路径中的文件名,返回值为string

Path.GetFileNameWithoutExtension(str),返回文件路径中的文件名,不带扩展名,返回值为string

Path.GetExtension(str),返回文件路径中的文件的扩展名,返回值为string

Path.GetDirectoryName(str),返回文件所在的全目录,返回值为string

Path.GetFullPath(str),返回文件的全路径,返回值为string

Path.Combine(str1,str2),将两路径连接在一起,返回值为string

实际上用字符串的操作也可以实现,现在这些功能已经封装起来成为一个静态类Path方便使用。

 

File类,命名空间System.IO,静态类

File.Exists(); --- 判断文件是否存在

File.Create(string path); --- 创建/修改已有文件

File.Delete(string path); --- 彻底删除指定文件

File.Copy(string old_path, string new_path); --- 复制文件到新路径

File.Move(string old_path, string new_path); --- 剪切文件到新路径

File.ReadAllBytes();

File.WriteAllBytes();

 

File.WriteAllLines(“path”, new string[4] ,Encoding.Default);//将string数组按行写入文件。

File.WriteAllText(“path”, “string”);//将字符串全部写入文件

File.WriteAllBytes(“path”,new byte[5]);//将byte[]全部写入到文件

File.AppendAllText();//将string追加到文件

 

Encoding类,字符串与字节数组相互转换的方法类

 

File.ReadAllBytes("path");//读取文件,返回byte[],把文件作为二进制来处理。

byte[] buffer = File.ReadAllBytes(string path);

string str1 = Encoding.GetEncoding("xxx").GetString(buffer);

string str2 = Encoding.utf8.GetString(buffer);

string str3 = Encoding.Default.GetString(buffer);

 

string[] contents = File.ReadAllLines(string path);//以行的形式读取

foreach (string item in contents)

{

  Console.WriteLine(item);

}

 

string str = File.ReadAllText(string path, Encoding.Default);//整个读取作为string

File.ReadAllLines和File.ReadAllText只适用于文本文件(返回值都是string或者string[]),分行处理用前者方便。

 

相对应也有File.WriteAllLines和File.WriteAllText,覆盖写入

不覆盖写入用File.AppendAllText

string str = "XXXXXX";

byte[] buffer = Encoding.Default.GetBytes(str);

File.WriteAllBytes(string path, buffer);

 

File类的上述方法占用了太多内存(一下子打开整个文件),可以选择使用FileStream类/StreamReader+StreamWriter的方法减轻内存的负担。

FileStream类操作字节(适用任何文件),StreamReader+StreamWriter操作字符串(仅适用文本文件)

FileStream类,命名空间System.IO,不是静态类!

FileStream fs = new FileStream(string path, FileMode, FileAccess);

FileMode和FileAccess枚举类型,前者是对文件做何操作(创建/打开/关闭/追加),后者是对文件内的数据做何操作(读写)

byte[] buffer = new byte[1024*1024*5];
fs.Read(buffer, int offset, int count);

上述表示每次读入5M,count可以写为buffer.Length,如果不满5M,Read()返回的是有效的数据的字节数,注意fs读出来的数据还是5M

int r = fs.Read(buffer,0,buffer.Length);

同上,将字节数组按某指定的解码方式转为string,可以选择起始位置index和长度count

string str = Encoding.Default.GetString(buffer);
string str = Encoding.Default.GetString(buffer,index,count);

文件流使用后需要关闭

fs.Close();

关闭文件流后释放其占用的空间

fs.Dispose();

可以将创建文件流对象的过程写在using当中,会自动帮我们在完成文件流对象的操作之后释放内存

using(FileStream fs = new FileStream(string path, FileMode.OpenOrCreate,FileAccess.Write))
{
  str = "XXXX";
  byte[] buffer = Encoding.Default.GetBytes(str);   fs.Write(buffer, 0, buffer.Length); }

 

StreamReader和StreamWriter类,命名空间System.IO,非静态类!

同样可以用using来自动关闭释放

using(StreamReader sr = new StreamReader(string path, Encoding.Default))
{
  while(!sr.EndOfStream)
  {
    Console.WriteLine(sr.ReadLine());
  }
}

using(StreamWriter sw = new StreamWriter(string path, bool append))
{
  sw.Write("XXX");
}

 

posted @ 2014-12-08 08:56  Cyrus Ho  阅读(271)  评论(0编辑  收藏  举报