c# - 统一编写txt文件时,它说在路径上共享冲突

标签 c# unity3d scripting save

我之前问过这个问题,但我更新了我的代码,同样的问题出现了。当 pathToLoad(Application.persistentDataPath+[save name]) 中已有保存文件时,该脚本完美运行。这是我的代码:

这是保存/加载代码:

public void GetDatesFromFile(string pathToLoad)
{
    Debug.Log("It is here!");
    if (File.Exists(pathToLoad))
    {
        Debug.Log("Exists");
        using (StreamReader reader = File.OpenText(pathToLoad))
        {
            string currentLine = "";
            string[] currentElements;
            string[] separatorString = new string[] { "," };
            currentLine = reader.ReadLine();
            currentElements = currentLine.Split(separatorString, StringSplitOptions.RemoveEmptyEntries);
            MainMenuBasicBehaviour.theTime = currentElements[0];
            MainMenuBasicBehaviour.theDate = currentElements[1];
            reader.Close();
        }
    }
    else
    {
        Debug.Log("No Exists");
        using (File.CreateText(pathToLoad))
        {
            using (TextWriter writer = new StreamWriter(pathToLoad, false))
            {

                writer.WriteLine("00:00:00,00/00/0000,1,1,500,20000,1500,50,20,10,5,2,1,1,0,10,50,50");
                writer.Close();
            }
            MainMenuBasicBehaviour.theTime = "00:00:00";
            MainMenuBasicBehaviour.theDate = "00 / 00 / 0000";
        }
    }
}

这是主类 MainMenuBasicBehaviour

public void GetDates()
{
    for (int i = 0; i < filePaths.Length; i++)
    {
        filePath = Application.persistentDataPath.ToString() + filePaths[i];
        Debug.Log(theDate + " " + theTime + filePath);
        savingTextObject.GetDatesFromFile(filePath);
        Debug.Log(theDate+" "+theTime+filePath);
        SavingTexts[i].text = "Load game taken in:\n " + theDate + " at " + theTime;

    }
}

错误如下:

IOException: Sharing violation on path C:\*\The Age Of Politics\Autosave.txt
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/FileStream.cs:320)
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share)
(wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)
System.IO.StreamWriter..ctor (System.String path, Boolean append, System.Text.Encoding encoding, Int32 bufferSize) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/StreamWriter.cs:124)
System.IO.StreamWriter..ctor (System.String path, Boolean append)
(wrapper remoting-invoke-with-check) System.IO.StreamWriter:.ctor (string,bool)
SavingTextsScripts.GetDatesFromFile (System.String pathToLoad) (at Assets/Scripts/SavingTextsScripts.cs:168)
MainMenuBasicBehaviour.Start () (at Assets/Scripts/MainMenuBasicBehaviour.cs:33)

它指向的行是:

SavingTextsScripts.cs:168 is the line: using (TextWriter writer = new StreamWriter(pathToLoad, false))
MainMenuBasicBehaviour.cs:33 is the line: savingTextObject.GetDatesFromFile(filePath);

我不知道我做错了什么。如果需要更多代码,我可以提供。

最佳答案

根据this统一回答帖子,

It looks like you still have a lock on the file you're trying to write to. And I think it might have something to do with the File.Create() method you're calling right before trying to access it with the StreamWriter.

与您的这段代码和错误位置匹配:

using (File.CreateText(pathToLoad))
{
    using (TextWriter writer = new StreamWriter(pathToLoad, false))
    {

因此,您可能需要遵循相同的建议并调用 Dispose(),然后再将其传递给流编写器:

File.Create("filepath").Dispose();

旁注:该行上的 using 可能也不合适。您实际上并没有声明要使用的变量,而是调用了一个方法,该方法返回了一个您随后忘记的对象。这样做可能会更好:

File.CreateText(pathToLoad)).Dispose();
using (TextWriter writer = new StreamWriter(pathToLoad, false))
{
    writer.WriteLine("00:00:00,00/00/0000,1,1,500,20000,1500,50,20,10,5,2,1,1,0,10,50,50");
    writer.Close();
}

关于c# - 统一编写txt文件时,它说在路径上共享冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44656364/

相关文章:

c# - 简单的触摸控制

php - 使用 php 计算 html 网页上的字数

linux - Bash脚本错误服务器问题

linux - 从命令行计算文件校验和

c# - 301 使用 unicode 字符重定向 - C#

c# - 设置 Visual Studio 2013 来开发 AutoCAD 2015 插件

c# - 将网格转换为图表以进行导航

c# - 如何从嵌套类或结构中以 json 格式编写

c# - IHostedService 的优雅关闭

c# - 如何将 azure 排队消息发送到 azure sql 数据库