2013-03-08 10 views
0

我不斷收到以下錯誤,當我嘗試寫一個臨時文件:進程無法訪問鎖定的文件是僅由我自己的應用

該進程無法訪問該文件 「C:\ Users \ jdoe \ AppData \ Local \ Temp \ jdoe.tmp',因爲它被另一個進程使用 。

這些是做什麼用的文件的唯一方法:

private void LoadData(string filePath) 
{ 
    if (!File.Exists(filePath)) 
    { 
     File.Create(filePath); 
     return; 
    } 

    var fileDetails = new FileInfo(filePath); 
    if (fileDetails.Length > 0) 
    { 
     using (var fileStream = new FileStream(filePath, FileMode.Open)) 
     { 
      // Do stuff... 
      fileStream.Close(); 
     } 
    } 
} 

private void SaveData(string filePath) 
{ 
    using (var fileStream = new FileStream(filePath, FileMode.Create)) 
    { 
     // Do stuff... 
     fileStream.Close(); 
    } 
} 

什麼是鎖定的文件嗎?

+0

可能值得指出的是,在'using'塊中調用'Close()'不是必需的。 – 2013-03-08 02:16:33

+0

@Alexei指出,在答案中,我從代碼中刪除了它。謝謝。 – 2013-03-08 18:47:25

回答

0

結果File.Create(filePath)返回FileStream,需要關閉。通過簡單地改變File.Create()這個消失的錯誤:

if (!File.Exists(filePath)) 
{ 
    File.Create(filePath).Close(); 
    return; 
} 
+2

根本不要調用'Create'可能會更好。你也不需要在'uisng'裏面'關閉',因爲它是多餘的。 – 2013-03-08 01:41:56

+0

有道理,謝謝! – 2013-03-08 01:45:34

-1

你必須刪除代碼的拳頭塊..

因爲當你會寫..如果文件不存在,將創建該文件或者如果文件已經存在,那麼它應該追加。

+0

嗨,歡迎來到Stack Overflow!你能否擴大你的答案?它不是應該擴大,請看看[如何回答](http://stackoverflow.com/questions/how-to-answer)。 – Jesse 2013-03-08 02:48:00

+0

刪除它會導致'fileDetails.Length> 0'失敗,但是如果我還首先添加一個'File.Exists(filePath)'檢查,它將起作用。 – 2013-03-08 18:45:51

相關問題