【问题标题】:C#: Cant access file after creatingC#:创建后无法访问文件
【发布时间】:2016-07-28 07:25:51
【问题描述】:

如果它不存在,我正在尝试创建一个 json 文件,然后将所有行写入其中。文件的创建工作,但我遇到的问题是 File.WriteAllLines 说“该进程无法访问该文件,因为它正在被另一个进程使用”。

这是我的代码:

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);
    }

【问题讨论】:

  • for 循环对我来说似乎有点奇怪;假设您在folderToSearch 中有 10 个文件;然后您删除并创建相同的 fileToEdit 文件 10 次,因为该字符串在您提供的代码中没有更改。
  • 空的catch 块对您或其他任何人都没有帮助。
  • @mcy 哦,是的,谢谢,我需要把它从 for 循环中取出

标签: c# file directory system.io.file


【解决方案1】:

File.Create() 返回一个FileStream,您可以使用它来执行文件 IO。虽然FileStream 是开放的(在你的情况下,它仍然开放谁知道多久,因为你既没有调用Close(),也没有调用Dispose()),它不允许其他任何人访问它(实际上,事情有点复杂),这就是你的WriteAllLines()调用失败的原因。

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多