2016-07-28 81 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