【问题标题】:fopen issue in iOSiOS中的fopen问题
【发布时间】:2012-05-19 11:54:39
【问题描述】:

由于某种原因,即使我已将路径转换为文档路径,fopen 也会给出错误No such file or directory

NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [docsPath stringByAppendingPathComponent:filename];

我使用 UTF8String 方法传递 NSString,并且只在读取模式下打开

if ((fh=fopen(filename, "r+b")) == NULL){
    perror("fopen");
    return -1;
}

尝试打开文件名时会打印出以下完整路径(我删除了应用程序实际目录名的确切值)

/var/mobile/Applications/#####/Documents/testImages.pak

为什么 fopen 检测不到文件?我已将其添加到目标中,甚至尝试将文件检查器中的位置设置更改为 Relative to GroupRelative to Project

【问题讨论】:

  • 打开filePath而不是filename怎么样?
  • 文件名变量位于 C API 本身中。 obj c 代码位于包装器中。我将带有 UTF8String 的 filePath 传递给期望 char * 的 c 函数
  • 我不知道你想要完成什么,但我建议使用原生的 NSFileManager 和 NSFileHandle,它们应该适用于 fopen 所做的几乎所有事情。
  • 文件是否真的存在于文档目录中?它是如何到达那里的?
  • @Helium3 使用可写副本的标准过程:如果文件在 doc-dir 中不存在,则从 resource-dir 将其复制到那里。在那里你可以写入文件。

标签: objective-c ios c fopen


【解决方案1】:

您必须使用以下方法将 NSString 转换为 char*,否则将无法正确映射到文件系统。

    char const *path_cstr = [[NSFileManager defaultManager] fileSystemRepresentationWithPath:pathString];

现在你可以直接在 fopen() 中使用了。

【讨论】:

  • 谢谢伙计。我现在挠了 1 天,为什么它不能在 iOS 10 上运行,这个答案有帮助。
猜你喜欢
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多