FileStream和File对比
File:是一次性读取或写入文件,对内存的占用率比较高。操作小文件无影响,大文件程序容易卡。
FileStream:是一点点地读取或写入文件,对内存的占用率比较低。操作字节,适合操作大文件。
FileStream创建
FileStream fs = new FileStream(@"文件路径",文件的打开,对文件的操作);
//创建读取流
FileStream fs = new FileStream(@"文件路径",FileMode.Open,FileAccess.Read);
//创建写入流
FileStream fs = new FileStream(@"文件路径",FileMode.OpenOrCreate,FileAccess.Write);
FileStream释放资源
using帮助我们释放FileStream资源
//读取
using(FileStream fsread = new FileStream(path1, FileMode.Open, FileAccess.Read)){
byte[] buffer = new byte[1024*1024*5]; //创建一个5M的字节数组
int n = fsread.Read(buffer,0,buffer.Length); //用5M的字节数组读取文件,返回值为,有效的字节数组长度
string s = Encoding.UTF8.GetString(buffer,0,n); //把字节数组转换成字符串,只转换有数据的数组元素,长度为0-n,这样不用访问整个数组。
Console.WriteLine(s);
}
//写入
using(FileStream fswrite = new FileStream(path2,FileMode.OpenOrCreate,FileAccess.Write)){
string s = "数据";
byte[] buffer = Encoding.UTF8.GetBytes(str); //把字符串转成字节数组
// byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
fs.Write(buffer,0,buffer.Length);
}
//复制,读取,写入的嵌套使用,需要创建在新方法里
public static void CopyFile(string path1,string path2)
{
using (FileStream fsread = new FileStream(path1, FileMode.Open, FileAccess.Read))
{
using (FileStream fswrite = new FileStream(path2,FileMode.OpenOrCreate,FileAccess.Write))
{
byte[] b = new byte[1024 * 1024 * 5];
//不断读取,直到数据结尾,结束读取
while (true)
{
int n = fsread.Read(b, 0, b.Length);
if (n == 0)
{
break;
}
fswrite.Write(b, 0, n);
}
}
}
}