我正在使用c#作为我的主要编程语言在Unity中制作游戏。我尝试创建一个新的save.txt和autosave.txt,如果它还没有存在于app文件夹中。它可以创建它,但它不能正常工作。这是我的代码: 创建和编写新的保存:
NSArray *days = @[
@"Mon",
@"Tue",
@"Wed",
@"Thu",
@"Fri",
@"Sat",
@"Sun"
];
NSUInteger dayIndex = [days indexOfObject:string];
这是我写的一个现有的.txt代码:
NSArray *sortedDays = [array sortedArrayUsingComparator:^NSComparisonResult(NSString *dayString1, NSString *dayString2) {
NSUInteger dayIndex1 = [days indexOfObject:dayString1];
NSUInteger dayIndex2 = [days indexOfObject:dayString2];
if (dayIndex1 < dayIndex2) {
return NSOrderedAscending;
}
if (dayIndex1 > dayIndex2) {
return NSOrderedDescending;
}
return NSOrderedSame;
}];
我不知道自己做错了什么。 附:在统一中,如果它有帮助,当我运行时,它会说它&#34; IOException:在路径C上共享违规:* \ Assets \ Save.txt&#34;
答案 0 :(得分:2)
File.CreateText返回StreamWriter对象。由于您没有使用此对象(或者在为文件创建新写入程序之前未将其处置),因此抛出异常,因为多个对象具有/想要对该文件的写访问权。
请详细了解IDisposable和&#39;使用&#39;语句。
答案 1 :(得分:1)
尝试使用File.CreateText()
返回的StreamWriter,而不是创建新的StreamWriter。
答案 2 :(得分:0)
虽然来自@ b00n和@martennis的答案对他们来说都有一些道理,但他们有点缺乏。一旦StreamWriter对象创建了文件,只关闭流不会减轻它对该文件的锁定。因此,当您创建一个新的StreamWriter来访问该文件时,它会抛出IOException,因为您的新流无法获取访问权限,因为它仍然被旧文件锁定。关闭流并将其处理将确保流可以执行所需的正确清理,以便释放文件以供后续读取。我强烈建议在MSDN上提供文件API文档,以便更好地了解它的功能以及如何使用它。
编辑:确保清理StreamWriter对象的一种方法是使用using语句作为@O。马提提到。这将是以下几点:
using(TextWriter writer = new StreamWriter(saveFilePath, false))
{
theTime = System.DateTime.Now.ToString("hh:mm:ss"); theDate = System.DateTime.Now.ToString("dd/MM/yyyy");
string ZeroPart = theTime + "," + theDate + ",";
string FirstPart = income;
writer.WriteLine(ZeroPart + FirstPart);
writer.Close();
}
using语句基本上等同于try-catch-finally,在finally语句中调用writer.Dispose(),以确保即使发生了异常,所使用的资源也已被正确清理。