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