Unity中使用using块仍触发文件路径共享冲突错误求助
问题原因及解决方案
出现"sharing violation on path"错误的核心原因是:默认的StreamReader构造函数打开文件时,使用的FileShare.Read模式会锁定文件,阻止写入操作;即使using块自动释放了StreamReader,在Unity编辑器环境下,文件系统或Unity的资源监视机制可能存在短暂的锁定延迟,导致后续写入时仍被判定为文件占用。
另外,直接用字符串拼接路径的方式不够可靠,可能因平台路径分隔符差异引发潜在问题(虽非本次错误直接原因,但值得修正)。
修正方案
1. 显式设置FileShare模式,避免读取时锁定文件
修改读取代码,手动创建FileStream并指定FileShare.ReadWrite,允许读取时其他流对文件进行写入操作:
using System.IO; // 确保已引用命名空间 string filePath = Path.Combine(Application.dataPath, "Memory of the game", "SkinFile.txt"); using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (StreamReader SkinReader = new StreamReader(fs)) { Line = SkinReader.ReadToEnd(); CheckedLine = true; } if (CheckedLine) { switch(Line) { case "0": Equip(); break; case "1": Equip1(); break; case "2": Debug.Log("wssssss"); Equip2(); break; case "3": Equip3(); break; case "4": Equip4(); break; case "5": Equip5(); break; case "6": Equip6(); break; } CheckedLine = false; }
2. 写入代码统一用Path.Combine拼接路径
修改Equip()中的写入代码,使用Path.Combine处理路径,提升跨平台兼容性:
string filePath = Path.Combine(Application.dataPath, "Memory of the game", "SkinFile.txt"); using (StreamWriter SkinWriter = new StreamWriter(filePath)) { SkinWriter.Write("0"); }
3. 额外排查点
- 确保没有外部程序(如记事本、文件管理器)打开
SkinFile.txt,外部进程占用也会触发共享冲突。 - 若在Unity编辑器中测试,尝试重启编辑器,避免Unity资源缓存机制导致的文件锁定。
内容的提问来源于stack exchange,提问作者Tonza-S
相关产品推荐
相关产品推荐

