2012-01-02 28 views
2

我正在使用一個文本文件在那裏有一些數據供以後使用。所以我所做的是檢查文件是否存在,如果不是,我會在需要時創建一個新文件。這給了我錯誤,說我的文件仍在被不同的進程使用,但我不確定這是爲什麼。該文件正在被另一個進程使用,我必須關閉它?怎麼樣?

這就是我的做法。在這裏,我檢查文件是否存在程序運行時啓動:

private void CreateLastOpenFile() 
    { 
     if (!Directory.Exists(directory)) 
     { 
      Directory.CreateDirectory(directory); 
     } 

     if (!File.Exists(file)) 
     { 
      File.Create(file); 
     } 
    } 

現在,我加入了一些數據,它同時檢查或創建一個新文件(我有這個在我的程序2處):

CreateLastOpenFile(); 
File.WriteAllText(file, data); 

這裏有什麼問題?我從網上看過一些例子,但沒有看到關於關閉任何文件的任何事情。

回答

4

試試這個。這將如果您使用下面的方法來將數據寫入文本文件,文件創建

if (!File.Exists(file)) 
     { 
     FileStream str = File.Create(file); 
     str.Close(); 
     } 
4

File.Create正在創建一個FileStream來鎖定文件。你應該關閉它。其實,你甚至不需要創建一個文件。 File.WriteAlltext將爲你做

2

我建議你一步創建並填充數據文件,使用像StreamWriter這樣的類來允許你處理類,你不應該有這樣做的問題,這裏有一個例子:

StreamWriter Swr = new StreamWriter(FilePath); 
Swr.Write(Data);   
Swr.Close(); 
Swr.Dispose(); 

//做密切和處置你會得到確保該文件不再鎖定

您還可以使用File.WriteAllText(路徑字符串,字符串數據),則此方法不不鎖定文件。

+1

'Dispose()'調用'Close()',它在文檔中 – 2012-01-02 08:47:10

2

您不關閉File.Create()返回的流句柄。

建議你不要在你的情況下使用File.Create()。您可以使用File.WriteAllText(file, data); - 根據MSDN文檔,如果該文件不存在,則創建該文件或在文件存在時覆蓋該內容。之後關閉文件流。

1

期間關閉打開的流,你不需要檢查文件是否存在,如果不創建它。 「WriteAllText」自己處理所有這些事情。它將創建文件(如果不存在),寫入數據並關閉它,或覆蓋文件(如果已存在)。 File.WriteAllText(file,data);

相關問題