2013-07-31 115 views
1

要寫上我的Pocket PC的內存我用下面的代碼的圖片:的BinaryWriter覆蓋現有文件c#

pic = (byte[])myPicutureFromDatabase; 
using (var fs = new BinaryWriter(new FileStream(filepath, FileMode.Append, FileAccess.Write))) 
{ 
    fs.Write(pic); 
    fs.Flush(); 
    continue; 
} 

我想問問你,如果這個方法覆蓋與如果新值的文件這個名字的文件已經存在或者什麼也不做,因爲已經存在這個文件? 我需要覆蓋文件,因爲這個文件已經存在,但具有舊值。

+1

FileMode.Append附加數據。如果您想覆蓋該文件,請使用FileMode.Create –

回答

1

MSDN FileMode.Create

指定操作系統應創建一個新文件。如果 文件已經存在,它將被覆蓋。這需要 FileIOPermissionAccess.Write權限。 FileMode.Create相當於 要求如果該文件不存在,使用CreateNew; 否則,請使用截斷。如果該文件已存在但是隱藏文件,則會引發UnauthorizedAccessException異常。

凡爲FileMode.Append

打開該文件,如果它存在,並尋求到該文件的末尾,或 創建一個新的文件。這需要FileIOPermissionAccess.Append 權限。 FileMode.Append只能與 FileAccess.Write一起使用。在 文件結束之前嘗試尋找位置會引發IOException異常,並且任何嘗試讀取的操作都會失敗 並引發NotSupportedException異常。

所以,你應該使用,如果文件存在,或創建一個新的文件,如果文件不存在這個

pic = (byte[])myPicutureFromDatabase; 
using (var fs = new BinaryWriter(new FileStream(filepath, FileMode.Create, FileAccess.Write))) 
     { 
      fs.Write(pic); 
      fs.Flush(); 
      continue; 
     } 
1

不,它追加行,你已經寫FileMode.Append規定,你應該以追加行指定FileMode.Create(或創建一個新的文件,如果不存在的話)

+0

謝謝,我在發佈問題後立即找到相同的解決方案。但是,感謝您的快速響應。 – user1788654