2013-03-15 189 views
2

所以,我試圖創建一個登錄表單,但我需要讀取和寫入文件等,首先;我創建了一個文件,寫「測試」的文件,但如果我再刪除文件,並嘗試在同一時間發出我的命令:創建後寫入文件時正在使用文件

FileIO.FileCheck("Usernames.pheonix"); 
FileIO.WriteFile("Usernames.pheonix", "test"); 

它把我拉到一個錯誤;

該進程無法訪問文件'C:\ Users \ XXX \ Desktop \ Pheonix Launcher \ Pheonix \ bin \ Debug \ Usernames.pheonix',因爲它正在被另一個進程使用。

我似乎無法讓我的頭周圍爲什麼它一直在這樣做,這裏有我的讀/寫文件:

public static void createFile(String FileName) 
{ 
    File.Create(FileName); 
} 

public static void WriteFile(String File ,String Message) 
{ 
    FileStream fs1 = new FileStream(File, FileMode.OpenOrCreate, FileAccess.Write); 
    StreamWriter writer = new StreamWriter(fs1); 
    writer.Write(Message); 
    writer.Close(); 
} 

public static void FileCheck(String fileName) 
{ 
    if (File.Exists(fileName)) 
     Console.WriteLine("File exists."); 
    else 
     createFile(fileName); 
} 
+0

是你的'createFile'調用過一次,然後你爲每一條你想記錄的消息調用'WriteFile'? – bas 2013-03-15 21:37:16

+0

那麼我只通過FileCheck調用一次,看看它是否存在,然後調用WriteFile。所以是的。 – 2013-03-15 21:39:06

+0

正如usr提到'Dispose'是這裏的關鍵字。 'FileStream fs1 ...'應該在'using'塊中,就像'StreamWriter'一樣。 – Silvermind 2013-03-15 21:41:00

回答

5

File.Create並創建一個文件 - 並且返回一個開放的流它。把它放在using區塊。 (不要只關閉它 - 這將是一個錯誤,因爲它不是例外的安全)。

實際上,仔細觀察,我發現由於FileMode.OpenOrCreate的原因你完全不需要這個。該文件將被創建。

+1

謝謝你,我沒有意識到它創建的文件anywawy。非常感激 – 2013-03-15 21:41:38