我正在开发一个 iPhone 项目,我需要调用一些 C 函数,这些函数位于诸如 myfile.c 之类的 C 文件中。我可以在其中调用一些函数。但是当我需要在 C 文件中打开一个文件时。我的访问权限(gdb)不正确。我要读取的文件已经放在项目文件夹中,并导入到项目中。甚至,我无法在 C 函数中创建新文件。任何人都可以帮我一把吗?非常感谢。
问问题
137 次
2 回答
1
在 iOS 中对文件使用 C 函数时,不能这样做
readFunction("filename.txt");
您必须为此设置路径,例如您的包中的文件
readFunction([[NSBundle mainBundle] pathForResource:@"filename" ofType:@"txt"].UTF8String);
并为写作做同样的事情,例如
NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [docsDir stringByAppendingPathComponent:@"filename.txt"];
writeFunction(filePath.UTF8String);
于 2013-04-28T21:34:10.533 回答
1
正如 Chris Loonam 所说,您不能仅通过文件名访问文件是 iOS - 您需要使用 -[NSBundle pathForResource:ofType:] 来获取完整的文件名。
要从 C 中执行此操作,您需要以下内容:
void testFunction(char* fileName)
{
NSString* fName = [NSString stringWithUTF8String: fileName];
NSString* fullPath = [[NSBundle mainBundle] pathForResource: fName ofType: @""];
const char* cFullPath = [fullPath cStringUsingEncoding: NSUTF8StringEncoding];
//do something with cFullPath
}
不幸的是,由于您在这里使用的是 Objective-C 函数,因此您需要将文件重命名为 .m 而不是 .c - 但它可以是普通的 C 源文件!
于 2013-04-28T22:41:49.007 回答