個人傾向使用File.WriteAllByte寫入文件:
//Stream to File MemoryStream ms=...Stream; ms.Position = 0; byte[] buffer = new byte[ms.Length]; ms.Read(buffer, 0, (int)ms.Length); File.WriteAllBytes(filepath, buffer);//寫入文件
StreamRead,StreamWrite,SreamRead,以及File的部分操作
// StreamRead,StreamWrite,File只能操作文本文件
//FileStream可以操作所有格式 包括文本,文件,圖片,視頻 //SreamRead讀取文件 using (StreamReader reader = new StreamReader(filepath)) { //reader.ReadLine();讀取第一行 string data = reader.ReadToEnd();//讀取所有 } //StreamWrite寫入文件 using (StreamWriter writer = new StreamWriter(filepath)) { //writer.Write("寫入的內容"); //也可以如下面一行一行寫入 writer.WriteLine("0"); writer.WriteLine("1"); writer.WriteLine(picName); writer.WriteLine(txtCount.Text); } //File即可以讀取文本 也可以寫入文本 //讀取 string data = File.ReadAllText(filepath); string[] datas = File.ReadAllLines(filepath); //寫入 string[] ss = new string[] {"arr1","arr2" }; File.WriteAllLines(filepath, ss); File.WriteAllText(filepath, "\r\n換行\r\n");
//附加
File.AppendAllLines(filepath,ss);
File.AppendAllText(filepath,str); //FileStream可以操作所有格式 包括文本,文件,圖片,視頻 //FileStream讀取 string ss = null; byte[] buffer = new byte[1024 * 1024 * 1]; //針對大文件1M1M的讀取 using (FileStream sr = new FileStream(sfilepath, FileMode.OpenOrCreate, FileAccess.Read)) { int sss = sr.Read(buffer, 0, buffer.Length); ss = Encoding.Default.GetString(buffer, 0, sss); } //FileStream寫入 using (FileStream fsWrite = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write)) { byte[] buffer = Encoding.Default.GetBytes(str); fsWrite.Write(buffer, 0, buffer.Length); }
Stream 和 File 之間的轉換
/// <summary> /// 將 Stream 寫入文件 /// </summary> public void StreamToFile(Stream stream,string filepath) { // 把 Stream 轉換成 byte[] byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 設置當前流的位置為流的開始 stream.Seek(0, SeekOrigin.Begin); // 把 byte[] 寫入文件 FileStream fs = new FileStream(filepath, FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); bw.Write(bytes); bw.Close(); fs.Close(); } /// <summary> /// 從文件讀取 Stream /// </summary> public Stream FileToStream(string filepath) { // 打開文件 FileStream fileStream = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read); // 讀取文件的 byte[] byte[] bytes = new byte[fileStream.Length]; fileStream.Read(bytes, 0, bytes.Length); fileStream.Close(); // 把 byte[] 轉換成 Stream Stream stream = new MemoryStream(bytes); return stream; }
文件復制(當然File.Copy更常用,這個是偶然中使用到整理的)
public static void CopyFile(string soucre, string target) { //讀取的流 using (FileStream fsRead = new FileStream(soucre, FileMode.Open, 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); //0代表已經讀取完 if (r == 0) { break; } fsWrite.Write(buffer, 0, r); } } } }