在c#和Unity中创建和编写txt文件时,它只创建它并且不使用它

时间:2017-06-14 08:27:51

标签: c# file unity3d save

我正在使用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;

3 个答案:

答案 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(),以确保即使发生了异常,所使用的资源也已被正确清理。