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