2011-03-11 68 views
1

我已經使用下面的代碼創建了一個新文件。但如果文件已經存在,那麼我需要用另一個文件名創建一個新文件。這可能嗎?如果文件已經存在於C中相同的位置,則始終創建新文件#

FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); 
BinaryWriter bw = new BinaryWriter(fs); 

bw.Write(b); 
bw.Close(); 
fs.Dispose(); 

我的文件保存位置是一樣的。

+0

爲什麼不檢查它是否存在? 'if(System.IO.File.Exists(filePath)){/ *在這裏改變文件名* /}' – 2011-03-11 09:08:22

回答

1

當然,你可以使用File.Exists(filePath)來檢查是否已經存在,並在這種情況下選擇另一個名稱。

+3

競爭條件等待發生。您可以將其用作性能優化(如果文件存在常見),但是單獨使用File.Exists並不是一個好主意。 – CodesInChaos 2011-03-11 09:10:48

+0

是否有可能在某人訪問同一文件時刪除文件。因爲我得到了錯誤。它被另一個使用c#.net某些代碼的進程使用。 – 2011-03-11 09:16:10

3

如果您使用FileMode.CreateNew,則會在文件已存在時引發異常。

CreateNew
指定操作系統應創建一個新的文件。這需要FileIOPermissionAccess.Write。如果該文件已經存在,則拋出IOException。
http://msdn.microsoft.com/en-us/library/system.io.filemode.aspx

您可以File.Exists一起使用,以減少異常的情形產生,但只是用File.Exists是有問題的。可以在您的存在檢查之間創建一個文件並將其打開。如果文件不可能存在(例如,您正在使用隨機生成的名稱),則完全跳過File.Exists檢查。

0

當然,你可以使用:

int i = 0; 
while (File.Exists(filename)) 
{ 
    i++; 
    filename = filename + i.ToString(); 
} 
// save the File 
相關問題