2016-07-28 110 views
-1

我試圖創建一個JSON文件,如果它不存在,然後寫入所有行。該文件的創建工作,但我遇到的問題是File.WriteAllLines說「該進程無法訪問該文件,因爲它正在被另一個進程使用」。C#:創建後無法訪問文件

這裏是我的代碼:

public void generateFolderFiles(string folderToSearch, string fileToEdit) { 
     string[] filesToSearch = Directory.GetFiles(folderToSearch); 
     string completeJson = ""; 
     for(int i=0;i<filesToSearch.Length;i++) { 
      try { 
       File.Delete(fileToEdit); 
       File.Create(fileToEdit); 
      } catch(Exception e){} 
      string[] fsLines = File.ReadAllLines(filesToSearch[i]); 
      string fsText = string.Join("", fsLines); 
      fsText=fsText.Replace("[", "").Replace("]", ""); 
      completeJson+=fsText; 
     } 
     completeJson="["+completeJson+"]"; 
     string[] lnes = new string[1]{completeJson}; 
     File.WriteAllLines(fileToEdit, lnes); 
    } 
+0

請參閱http://stackoverflow.com/questions/26741191/ioexception-the-process-cannot-access-the-file-file-path-because-it-is-being –

+0

'for'循環看起來有點不可思議對我來說;假設'folderToSearch'中有10個文件;那麼你刪除並創建相同的'fileToEdit'文件10次,因爲該字符串在你提供的代碼中沒有改變。 – mcy

+1

空'catch'塊沒有幫助你或任何其他人。 –

回答

2

File.Create()返回FileStream,你可以用來做文件IO。雖然FileStream是開放的(在你的情況下,它仍然是開放的,因爲誰知道多久,因爲你沒有呼籲Close(),也不是Dispose()),它不允許任何人訪問它(事實上,事情有點多複雜),這就是爲什麼你的WriteAllLines()呼叫失敗。

+0

啊,謝謝你,問題解決了;) – Cryonic