2013-07-24 119 views
0

如果文本文件不存在,並且在向該文件添加文本後立即創建,我正在創建一個文本文件。然而,我的編譯器說它正在被另一個進程使用,我認爲這是因爲它剛創建。我怎樣才能解決這個問題?創建後編輯文本文件

代碼excerpt-

//If the text document doesn't exist, create it 
if (!File.Exists(set.cuLocation)) 
{ 
    File.CreateText(set.cuLocation); 
} 

//If the text file after being moved is empty, edit it to say the previous folder's name 
System.IO.StreamReader objReader = new System.IO.StreamReader(set.cuLocation); 
set.currentUser = objReader.ReadLine(); 
objReader.Close(); 
if (set.currentUser == null) 
{ 
    File.WriteAllText(set.cuLocation, set.each2); 
} 

回答

5

CreateText方法實際上創建(和返回)一個StreamWriter對象。你永遠不會關閉那個流。 你試圖完成什麼?你爲什麼試圖從一個空文件讀取? 只需保留對您正在創建的StreamWriter的引用並將其用於編寫。

StreamWriter sw = File.CreateText(set.cuLocation); 

,然後調用sw.Write

參考參見http://msdn.microsoft.com/en-us/library/system.io.streamwriter.write.aspx

完成後,請致電sw.Close

請注意,寫作時可能會發生異常。這可能會阻止該流被關閉。

解決此問題的良好模式是將StreamWriter包裝在using塊中。看到這個問題的更多細節:Is it necessary to wrap StreamWriter in a using block?

+0

我如何關閉該流? – TheUnrealMegashark

+1

@TheUnrealMegashark我建議你只是閱讀文檔。那裏的例子顯示你如何去做。 –

+0

@TheUnrealMegashark,只需在末尾加上'.Close()'。 – gunr2171

1

不要忘記調用Close方法:

if (!File.Exists(set.cuLocation)) 
{ 
    File.Create(set.cuLocation) 
     .Close(); 
} 
0

您可以在using塊,它會自動關閉流爲你附上它:

if (!File.Exists(set.cuLocation)) 
{ 
    File.CreateText(set.cuLocation); 
} 

using(System.IO.StreamReader objReader = new System.IO.StreamReader(set.cuLocation)) 
{ 
    set.currentUser = objReader.ReadLine(); 
} 

if (set.currentUser == null) 
{ 
    File.WriteAllText(set.cuLocation, set.each2); 
}