一、Path类
Path类是静态类,在命名空间IO中,专门用来处理路径一类的;Path能实现的功能,字符串也能实现,只是Path提供方便简洁的方法:
Console.WriteLine(Path.GetFileName(str)); //快速获得文件名
Console.WriteLine(Path.GetFileNameWithoutExtension(str)); //快速获得不包括后缀的文件名
Console.WriteLine(Path.GetExtension(str)); //快速获得文件名
Console.WriteLine(Path.GetDirectoryName(str)); //快速获得文件所在的文件夹
Console.WriteLine(Path.GetFullPath(str)); //快速获得文件所在的全路径
Console.WriteLine(Path.Combine(@"D:\360Downloads\HotFix\","一路有你.wav")); //将两个字符串组合成路径
File类也是静态类,用来处理文件,编辑读写等
优点:方便快捷; 缺陷:只能读写小文件
File.Create(@"C:\Users\tufeiax\Desktop\new.txt");
Console.WriteLine("创建成功");
删除一个文件(彻底删除,不会到回收站)
File.Delete(@"C:\Users\tufeiax\Desktop\new.txt");
Console.WriteLine("删除成功");
//复制一个文件
File.Copy(@"C:\Users\tufeiax\Desktop\new.txt",@"C:\Users\tufeiax\Desktop\123.txt");
Console.WriteLine("复制成功");
1、读文件:
1)ReadAllBytes:当文件不是文本形式,而是音乐、视频等文件时,需要使用此方法
//读取文件,转成字节数组,返回字节数组
byte[] buffer = File.ReadAllBytes(@"F:\学习\C#\视频\传智播客视频学习\3.2014年 .Net基础\下载必看.txt");
//将字节数组中的每一个元素按照我们指定的编码格式解码成字符串.UTF-8 GB2312 GBK ASCII
string s = Encoding.Default.GetString(buffer);
2)ReadAllLines:需要单独操作每一行时选用
string[] str = File.ReadAllLines(@"C:\Users\tufeiax\Desktop\new.txt",
Encoding.Default);
foreach(string item in str)
Console.WriteLine(item);
3)ReadAllText:读取所有文本中所有数据时选用
string str = File.ReadAllText(@"C:\Users\tufeiax\Desktop\new.txt",
Encoding.Default);
Console.WriteLine(str);
2、写文件:与读文件对应
1)WriteAllBytes:
//写文件,如果没有此方法会创建,如有则覆盖
string str = "人生得意须尽欢";
//写之前需将字符串转换成字节数组
byte[] b = Encoding.Default.GetBytes(str);
File.WriteAllBytes(@"C:\Users\tufeiax\Desktop\new.txt",b);
2)WriteAllLines
3)WriteAllText
以上三种方法,如果该路径没有这个文件,则新建并写入,如果有这个文件,则覆盖原数据
3.追加文件:
1)AppendAllText
2)AppendText
3.文件的路径: 绝对路径和相对路径
绝对路径:文件的精确路径
相对路径:文件相对于应用程序的路径
比较: 在程序开发中,应该尽量使用相对路径
三、文件流:FileStream ---最重要的文件操作类,因为可以处理大文件,可以处理字节(可以处理所有文件)
FileStream相对于File来说,方法更多更全面,适合大文件操作(几百k以上),可以控制读取和写入的量,不会太耗费内存
FileStream(String, FileMode, FileAccess):
1. 读取数据
第一步创建对象:
FileStream fsRead = new FileStream(@"C:\Users\tufeiax\Desktop\123.txt",
FileMode.OpenOrCreate,FileAccess.Read);
第二步设置每次读写大小:
byte[] buffer = new byte[1024 * 10245 * 5];//每次读取5M (耗费内存的大小)
第三部操作数据:
读取
int r = fsRead.Read(buffer,0,buffer.Length); //返回本次实际读取到的有效字节数
第二个参数是开始读取文件的位置,第三个参数是读取长度
解码
//将字节数组中每一个元素按照指定的编码格式解码成字符串形式
string s = Encoding.Default.GetString(buffer,0,r);//第二个参数是解码位置,第三个解码个数
第四步、关闭流,释放资源
fsRead.Close(); //关闭文件流
fsRead.Dispose(); //释放流所占的资源
自动释放资源方法:
将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源
2、写入数据:
using(FileStream fsWrite = new FileStream(@"C:\Users\tufeiax\Desktop\123.txt",
FileMode.OpenOrCreate,FileAccess.Write))
{
string str = "看我有没有把你覆盖掉";
byte[] buffer = Encoding.Default.GetBytes(str);//转成字节数组
fsWrite.Write(buffer,0,buffer.Length);
}
Console.WriteLine("写入成功");
//使用StreamReader来读取一个文本文件
using(StreamReader sr = new StreamReader(@"C:\Users\tufeiax\Desktop\123.txt",Encoding.Default))
{
while(!sr.EndOfStream) //判断是否读到文件末尾
Console.WriteLine(sr.ReadLine()); //读取一行文本,sr。ReadLine()直接返回字符串
}
//使用treamWriter来写入一个文本文件
using(StreamWriter sw = new StreamWriter(@"C:\Users\tufeiax\Desktop\xxx.txt",true))
{
sw.Write("人生如梦!");
}
Console.WriteLine("写入成功");