.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"); }