Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写入文件时共享冲突_C#_File_Serialization - Fatal编程技术网

C# 写入文件时共享冲突

C# 写入文件时共享冲突,c#,file,serialization,C#,File,Serialization,我有一个基本脚本,如果目录/文件不存在,它会创建一个目录/文件,但它会给我一个共享冲突错误。我不知道为什么会这样 这是我当前的代码: private static void SetDirectory(string folder, string filename, string extension) { _stringBuilder.Clear(); string path = Application.persistentDataPath;

我有一个基本脚本,如果目录/文件不存在,它会创建一个目录/文件,但它会给我一个共享冲突错误。我不知道为什么会这样

这是我当前的代码:

    private static void SetDirectory(string folder, string filename, string extension)
    {
        _stringBuilder.Clear();

        string path = Application.persistentDataPath;

        _stringBuilder.Append(path);
        _stringBuilder.Append("/");
        _stringBuilder.Append(folder);
        _stringBuilder.Append("/");

        string directory = _stringBuilder.ToString();
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }
        _stringBuilder.Append(filename);
        _stringBuilder.Append(".");
        _stringBuilder.Append(extension);

        string file = _stringBuilder.ToString();
        if (!File.Exists(file))
        {
            File.Create(file);
        }
    }

    public static void Save<T>(T data, string folder, string filename, string extension)
    {
        SetDirectory(folder, filename, extension);

        byte[] bytes = SerializationUtility.SerializeValue(data, DataFormat.JSON);
        File.WriteAllBytes(_stringBuilder.ToString(),bytes);
    }

如果我注释掉第二个save方法调用,这似乎是可行的。但不确定原因。

这将返回一个
文件流:

File.Create(file);
因为您没有关闭文件/处理此文件,所以您的应用程序将保持文件打开

然后尝试在此处写入同一文件:

File.WriteAllBytes(_stringBuilder.ToString(),bytes);
它看到它已经被打开(通过
文件.Create
)然后出错

您有两种解决方案:

  • 根本不创建文件。它是完全不必要的,因为
    文件。如果文件不存在,writealBytes(…)
    将创建该文件
  • 包装
    文件。创建(文件)中使用
    标记进行编码,如下所示
  • SetDirectory
    返回创建的流,并写入流
  • 如果您必须在写入文件之前创建该文件,无论出于何种原因,您只需使用
    标记将
    file.create(file)
    包装在
    中,该标记将在创建文件后立即处理流,这意味着您的程序将不再锁定该文件

    using (File.Create(file));
    

    它是否也会创建目录,并使我的目录创建代码变得多余?不,它不会为您创建目录。
    using (File.Create(file));