文章目录
1 File的弊端
File只能去操控一个小文件,因为其是一次性全部读写
2 文件流用来操作大文件
(1)FileStream(用来操作字节)
(1) 1、读取数据
FileStream fsRead = new FileStream(@“F:\c#学习视频\11.Net基础班第十一天\0326.Net基础班第十一天\资料\0326.Net基础班第十一天\01复习\bin\Debug\1.txt”, FileMode.OpenOrCreate, FileAccess.Read);
第一个参数表示要操作文件的路径
第二个参数表示对文件做一个怎样的操作
第三个参数表示对文件的数据进行怎样的操作
byte[ ] buffer=new byte[102410242];
int r=fsRead.Read(buffer,0,buffer.length);//返回的int类型表示实际读取的有效字节数
fsRead.Close();//垃圾回收期并不能释放流的资源,所以必须手动
static void Main(string[] args)
{
FileStream fsWrite = new FileStream(@“C:\Users\丁浩然\Desktop\练习.txt”, FileMode.OpenOrCreate, FileAccess.Write);
string s = “今天天气好”;
byte[] buffer=Encoding.Default.GetBytes(s);
fsWrite.Write(buffer,0,buffer.Length);
fsWrite.Close();
fsWrite.Dispose();
Console.Write(“写入成功”);
Console.ReadKey();
}的释放流资源,必须写
fsRead.Dispose();//垃圾回收期并不能释放流的资源,所以必须手动的释放流资源,必须写
string str=Encoding.Default.GetString(buffer,0,r),;//由于我们将数据存到了buffer中,而我们的目的是打印到控制台中,因此要将字节数组转换为字符串类型
Console.WriteLine(str);
Console.ReadKey();
(1)2、写入数据
static void Main(string[] args)
{
FileStream fsWrite = new FileStream(@"C:\Users\丁浩然\Desktop\练习.txt", FileMode.OpenOrCreate, FileAccess.Write);
string s = "今天天气好";
byte[] buffer=Encoding.Default.GetBytes(s);
fsWrite.Write(buffer,0,buffer.Length);
fsWrite.Close();//手动的释放流资源,必须写
fsWrite.Dispose();//手动的释放流资源,必须写
Console.Write("写入成功");
Console.ReadKey();
}
(1) 3、Filestream的改进
由于我们在使用FileStream的过程当中,经常会忘记写Close() Dispose(),
所以微软提供给我们更为简单的方法帮助我们关闭流和释放流所占用的资源。
就是将创建FileStream对象的过程写在using(){}当中
static void Main(string[] args)
{
using(FileStream fsWrite = new FileStream(@"C:\Users\丁浩然\Desktop\练习.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
string s = "今天天气好";
byte[] buffer=Encoding.Default.GetBytes(s);
fsWrite.Write(buffer,0,buffer.Length);
Console.Write("写入成功");
}
COnsole.Readkey();
}
(1)4、使用FileStream对大文件进行复制
static void Main(string[] args)
{
string source = @"F:\c#学习视频\12.Net基础班第十二天\12.Net基础班第十二天\0326.Net基础班第十二天\video\10、总结";
string target = @"F:\c#学习视频\12.Net基础班第十二天\12.Net基础班第十二天\0326.Net基础班第十二天\资料\new.wmv";
CopyFile(source, target);
Console.WriteLine("复制成功");
Console.ReadKey();
}
public static void CopyFile(string source, string target)
{
using (FileStream fsRead = new FileStream(source, FileMode.OpenOrCreate, FileAccess.Read))
{
using (FileStream fsWrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = new byte[1024 * 1024 * 5];
while (true)
{
int r = fsRead.Read(buffer, 0, buffer.Length);//本次读取实际读取到的实际字节数
fsWrite.Write(buffer, 0, r);//在写入时应该写入实际读取到的有效字节数
if (r == 0)
{
break;
}
}
}
}
}
3 StreamWriter 、StreamReader(用来操作字符)
使用StreamReader读数据
static void Main(string[] args)
{
using (StreamReader sr = new StreamReader(@"C:\Users\丁浩然\Desktop\练习.txt",Encoding.Default))
{
while(!sr.EndOfStream)
{
string str = sr.ReadLine();//由于ReanLine只读取一行数据,为了使数据全部读取
Console.WriteLine(str); //引入while语句,当流的位置不在结尾时就一直循环
}
}
Console.ReadKey();
}
使用StreamWriter来写数据
写入时会覆盖
static void Main(string[] args)
{
using (StreamWriter sw = new StreamWriter(@"C:\Users\丁浩然\Desktop\练习.txt"))
{
sw.Write("6666666666600");
}
Console.WriteLine("写入成功");
Console.ReadKey();
}
写入不覆盖
static void Main(string[] args)
{
using (StreamWriter sw = new StreamWriter(@"C:\Users\丁浩然\Desktop\练习.txt",true))
{
sw.Write("123");
}
Console.WriteLine("写入成功");
Console.ReadKey();
}