2017-06-02 101 views
1

我是C#的初學者,並且正在開發一些練習工具,無論如何,我可以使用StreamWriter將它寫入項目的Bin文件夾中的txt文件, File.CreateText,但是當我嘗試添加一個路徑並追加它時,我得到一個文件但沒有寫入它。基本文本文件正在創建,但沒有寫入

我只是用WinFormApp

try 
{ 
    string mypath = @"C:\Temp\Rocket League Tracker.txt"; 

    StreamWriter RocketLeagueTrackerFile; 

    RocketLeagueTrackerFile = File.CreateText(mypath); 
    RocketLeagueTrackerFile.WriteLine("Rocket League Tracking"); 

    File.AppendAllText(mypath, MyGameResult + Environment.NewLine); 

    RocketLeagueTrackerFile.Close(); 
} 
catch 
{ 
} 
+0

刪除try/catch語句,也許你會看到這個問題,而不是 – Steve

+0

捕,加趕上(例外){Console.WriteLine(ex.Message); }來查看問題。把消息放在這裏尋求更多幫助。目前還不清楚你的代碼中的「MyGameResult」是什麼 – Media

回答

2

當你調用File.CreateText你正在獲得在該文件上的鎖。
以下調用File.AppendAllText不使用從File.CreateText返回的StreamWriter,但它再次嘗試獲取對同一文件的鎖定。
這會導致異常(IOException),但由於您添加了空的try/catch,因此無法看到它。

不要無緣無故地使用空的try/catch,因爲您隱藏了特殊情況,並且程序可能會在用戶桌面沒有解釋的情況下崩潰。
或者你在尋找一個神祕錯誤並且需要打電話給SO(像這裏)那樣放鬆時間。

如果你真的需要顯示一條消息,您的用戶則

..... 
catch(Exception ex) 
{ 
    MessageBox.Show("Unexpected Error:" + ex.Message); 
    // Rethrow the exception to upper layers.... 
    throw; 
} 

說,你不要因爲根據MSDN File.AppendAllText

打開一個需要File.CreateText文件,將指定的字符串附加到該文件,然後 關閉該文件。如果該文件不存在,則此方法創建一個 文件,將指定的字符串寫入文件,然後關閉該文件。

string mypath = @"C:\Temp\Rocket League Tracker.txt"; 
string title = "Rocket League Tracking"; 
File.AppendAllText(mypath, title + Environment.NewLine + 
          MyGameResult + Environment.NewLine); 

或者,如果你需要始終覆蓋與該名以前的文件替換File.AppendAllText與File.WriteAllText。

+0

這工作!謝謝,我衷心感謝。我注意到我得到了這個例外,並且會跟進,但是你觸及了它。 – PTK

2

你應該使用語句此使用。 File.CreateText是鎖定文件。

using(RocketLeagueTrackerFile = File.CreateText(mypath)) 
{    
    RocketLeagueTrackerFile.WriteLine("Rocket League Tracking"); 
} 

File.AppendAllText(mypath, MyGameResult + Environment.NewLine); 
0

您還可以使用:

File.WriteAllText(mypath ,"Rocket League Tracking");