【问题标题】:fopen() always return NULL on iOS devicefopen() 在 iOS 设备上总是返回 NULL
【发布时间】:2022-01-16 18:36:55
【问题描述】:

文件存在于 iOS 捆绑目录中。 fopen() 在 iOS 设备上总是返回 NULL,但在 iOS sumulator 上正常,代码如下:

NSString *path = [NSBundle.mainBundle pathForResource:@"yuv420p_640x360" ofType:@"yuv"];
BOOL exists = [NSFileManager.defaultManager fileExistsAtPath:path];
NSLog(@"%d", exists); //prints "1"
const char *path2 = [path UTF8String];
FILE *fp = fopen(path2, "rb+"); //fp is NULL

环境:macOS 12.0.1、M1 MacBook Pro、iPadOS 15.0

【问题讨论】:

  • iOS 执行环境是沙盒的,你不能用“写”模式打开包中的文件,因为包中的文件不能被修改(尝试只用“r”作为模式)。
  • @ChristosKoninis 是的,最后我只是将“rb+”更改为“rb”并运行正常。谢谢
  • 因为它帮助我将我的评论转移到一个完整的答案,以便更好地了解,以防有人遇到同样的问题,以便轻松找到解决方案

标签: ios macos fopen ipados


【解决方案1】:

iOS 执行环境是沙盒的,您无法使用“写入”模式打开包中的文件,因为无法修改包中的文件(尝试仅使用“r”模式)。

【讨论】:

  • @Smeegol 如果您觉得我的解决方案有用,请接受它,以便其他人在遇到同样问题时得到帮助
【解决方案2】:

您无法在 iOS 中打开任何文件。应用在 iOS 中是沙盒化,即应用只能访问其目录,而不能访问(读/写)其目录之外的任何文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2013-04-20
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多