工作中遇到了文件的跨平台傳送 運用了文件流 而且將計算機上的文件讀取到程序內存裡 反之將內存裡的數據以文件的形式保存 都是比較常用的 在這裡做一個簡單的應用示例。
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");
}
}