如何解决如何使用 C 在 iOS 中打开文件?
解决方案
没有错误,我没注意。感谢 Rob 指出这一点
当我尝试从 C 函数访问文件时,我只得到 permission denied error (13) 没有这样的文件或目录,我找不到原因。当我使用 Swift 创建、读取或写入时不会发生这种情况。
我尝试了几种方法来在用户数据容器内创建文件 URL,C 没有任何作用,它只适用于 Swift。
即使文件是用 Swift 创建的,在 C 调用前后打开、读取和验证,它也只有 C 中的错误。
我尝试过的事情
// I tried different paths before and added the filename to these directories
// FileManager.default.urls(for: .documentDirectory,in: .userDomainMask).first!
// FileManager.default.urls(for: .libraryDirectory,in: .userDomainMask).first!
let path: String = NstemporaryDirectory().appending("test_file.txt")
FileManager.default.fileExists(atPath: path.path)
// true
XCTAssertNoThrow(try "test".write(to: URL(fileURLWithPath: path),atomically: true,encoding: .utf8))
XCTAssertNoThrow(try FileManager.default.setAttributes([FileAttributeKey.posixPermissions: 0o777],ofItemAtPath: path))
// call C
test_read_file(path)
FileManager.default.fileExists(atPath: path.path)
// true
// test_read_file.c
int test_read_file(const char* path) {
access(file_path,W_OK);
// returns 0
open(path,O_RDONLY);
// returns 13
// errno is 2 (ENOENT: No such file or directory)
return 0;
}
更正
errno
值为 2
ENOENT 2 No such file or directory
解决方法
13 返回值是一个文件句柄,而不是一个错误代码,它表明您的代码完全按照您的预期工作。
open
成功返回非负值,失败返回 -1。要检查特定错误,请检查 errno
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。