【问题标题】:file exist but cannot open?文件存在但无法打开?
【发布时间】:2012-11-15 08:03:57
【问题描述】:

保存我使用过的机制:

    NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:self forKey:@"Save"];
    [archiver finishEncoding];
    [data writeToFile:filePath atomically:YES];
    [archiver release];
    [data release];

我用过

[[NSFileManager defaultManager] fileExistsAtPath:savePath];

[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[SynchronizedData createPath] error:&error]

检查我的文件是否存在。他们确认文件存在。

但是我无法加载具有相同目录路径的文件

    //NSData *encodedData = [[NSFileManager defaultManager] contentsAtPath:[SynchronizedData createPath]];

    NSData *encodedData = [[[NSData alloc] initWithContentsOfFile:tempFilePath] autorelease];

    if (encodedData == nil) {
        NSLog(@"Save cannot open while loading!");
        return nil;
    }

上面的encodedData,都返回nil。 (自动释放不是问题,我已经检查过了)

有什么想法吗?

我在previous thread找到了类似的情况,我再次尝试保留我的tempFilePath,没关系,问题仍然存在。


我使用比上述更简单的机制完成了保存。

从目录中获取 NSData 的问题仍未解决。可能是由于@paxdiablo 提到的读取权限。

因此,我使用“文档”文件夹而不是“库”。 NSData 打开没有错误。

【问题讨论】:

  • tempFilePath 是什么?
  • tempFilePath 与 savePath/[SynchronizedData createPath] 的路径相同
  • 请NSLog tempFilePath 并检查它是否正确。
  • 因为我对文件I/O方法不太了解,所以我试着把保存目录(/var/mobile/Applications/AA414ECF-337D-485A-A5D7-09159D042C64/Library/PlayerProfile/gameData .dat) 以及文件夹目录 (/var/mobile/Applications/AA414ECF-337D-485A-A5D7-09159D042C64/Library/PlayerProfile) 进入 tempFilePath 以测试我的功能。他们俩都失败了
  • 保存目录是否正确,检查gameData.dat文件中的内容。我认为它是空的

标签: iphone ios


【解决方案1】:

文件可以存在但仍不可读。您应该首先检查该文件的权限。

此外,使用 initWithContentsOfFile:options:error: 变体来获取错误信息 - 希望它会告诉您是否存在问题。

并且,根据您看到的评论:

可可错误 257

看来权限是问题所在。如果您查看Foundation constants,您会看到:

NSFileReadNoPermissionError = 257

表示您无权读取该文件。

【讨论】:

  • 感谢您的评论。我检查了 NSData 类参考。我认为您在谈论'initWithContentsOfFile:选项:错误:'对吗?我收到错误:操作无法完成。 (可可错误 257。)
  • @user1824022,那么这是我认为的权限问题。从 Foundation 常量来看,257 是读取权限失败 - 请参阅我的更新。
  • 感谢您的评论。我已经发布了我使用的保存机制。它基本上是 [NSData writeToFile]。但是,我发现没有提到读取权限的文章...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 2015-07-16
  • 2017-01-23
相关资源
最近更新 更多