你的位置:首页 > ASP.net教程

[ASP.net教程]C#文件流的读与写


工作中遇到了文件的跨平台传送 运用了文件流 而且将计算机上的文件读取到程序内存里 反之将内存里的数据以文件的形式保存 都是比较常用的 在这里做一个简单的应用示例。

1 将内存数据“写”到计算机的文件里

const string path = @"D:\text.txt";//保存文件的路径
string content = "文件内容!!!!";//定义内存里的数据
byte[] bytes = Encoding.Default.GetBytes(content);//将转换成二进制数据 编码格式为Encoding.Default
int length = bytes.Length;//如果想把数据完整的写入 要写入的数据长度
using (FileStream stream = new FileStream(path, FileMode.Create))
{
  stream.Write(bytes, 0, length);//写入
}

2 将计算机文件里的数据“读”到内存里

const string path = @"D:\text.txt";//要读取数据的文件,已之前写入的文件为例
byte[] bytes;//创建读取结果的对象
using (FileStream stream = new FileStream(path, FileMode.Open))
{
  bytes = new byte[stream.Length];//可以确定读取结果的长度了
  stream.Read(bytes, 0, bytes.Length);//读操作
}
string result = Encoding.Default.GetString(bytes);//将读取的结果转换类型 编码格式与写入的编码格式最好一致 以防止出现乱码
Console.Write(result);

3 用文件流的“读”和“写”操作实现一个类似COPY的功能 打印COPY进度

string rPpath = @"D:\冰与火之歌:权力的游戏.Game.of.Thrones.2016.S06E03.HD720P.X264.AAC.CHS-ENG.DYTT.mp4";//我计算机的C盘存在这样一个视频
string wPath2 = @"E:\A.mp4";//我想把它写入到E盘
byte[] bytes;//定义一个需要写入和读取的容器 二进制类型
using (FileStream rStream = new FileStream(rPpath, FileMode.Open))
{
  bytes = new byte[rStream.Length];//全部读取
  rStream.Read(bytes, 0, bytes.Length);
}
using (FileStream wStream = new FileStream(wPath2, FileMode.Create))
{
  int num = bytes.Length / (1024 * 1024);//每次读取的大小为1MB
  for (int i = 0; i <= num; i++)
  {
    wStream.Write(bytes, 0, num);
    i++;
    Console.Write(Math.Round((i / (float)num), 2));//打印已读取的百分比
    Console.Write("\n");
  }
}