標籤:div 位元組數組 存在 唯讀 gc記憶體回收 寫入檔案 stream tar 基礎學習
FileStream和File的區別 後者比前者給記憶體帶來壓力大。
FileStream可以操作位元組也就是可以儲存任何類型的檔案。
1.FileStream讀檔案操作
//OpenOrCreate:有就開啟,沒有就建立 //FileStream 3個參數的含義: 1.path 2,針對檔案什麼操作,3針對檔案內容怎麼操作 FileStream fsRead = new FileStream(@"D:\extension_6_12.crx", FileMode.OpenOrCreate, FileAccess.Read); byte[]buffer=new byte[1024*1024*5];//1024*1024*5 唯讀取5M,不要寫太大比如8G 那就記憶體溢出了。 //if file byte.length=3.8M //返回本次實際讀取的有效位元組數。 int r=fsRead.Read(buffer, 0, buffer.Length);//從0讀,到最大內容長度5M. //將位元組數組解碼成字串 string s = Encoding.Default.GetString(buffer,0,r); //只解碼內容的部分 //關閉,GC記憶體回收處理器不會自己自動回收 fsRead.Close(); //釋放資源 fsRead.Dispose(); Console.WriteLine(s); Console.ReadKey();
2.FileStream寫檔案操作
// 使用FileStream寫入資料 using (FileStream fs=new FileStream(@"D:\\new.txt",FileMode.OpenOrCreate,FileAccess.Write)) { string str="666666666666666666666"; byte[] buff = Encoding.UTF8.GetBytes(str); fs.Write(buff,0,buff.Length);//如果檔案存在那麼將,一個一個字元覆蓋檔案 } Console.WriteLine("寫入檔案"); Console.ReadKey();3.多媒體檔案的複製
將多媒體檔案讀出來,讓後寫入到另一個檔案
string source = @"c:\\zumba.mp3"; string targetSource = @"D:\\zumba.mp3"; using (FileStream fsRead=new FileStream(source,FileMode.OpenOrCreate,FileAccess.Read)) { using (FileStream fsWrite=new FileStream(targetSource,FileMode.OpenOrCreate,FileAccess.Write)) { byte[] buffer = new byte[1024 * 1024 * 6]; //最多讀取6M //檔案比較大所以迴圈讀取 //返回本次讀取實際取代的位元組數。 while (true) { int r = fsRead.Read(buffer, 0, buffer.Length); //如果返回長度0意味著讀取完畢 if(r==0) { break; } fsWrite.Write(buffer, 0, r); } } }
C#基礎學習之FileStream