Iphone Object-C调用C函数读取文件
我正在做一个iPhone项目,我需要调用一些C函数,这些函数位于像myfile.C这样的C文件中。我可以调用其中的一些函数。但是当我需要在C文件中打开一个文件时。我获得了错误访问(gdb)。我要读取的文件已放入项目文件夹并导入到项目中。 甚至,我不能用C函数生成新文件。Iphone Object-C调用C函数读取文件,iphone,ios,objective-c,c,Iphone,Ios,Objective C,C,我正在做一个iPhone项目,我需要调用一些C函数,这些函数位于像myfile.C这样的C文件中。我可以调用其中的一些函数。但是当我需要在C文件中打开一个文件时。我获得了错误访问(gdb)。我要读取的文件已放入项目文件夹并导入到项目中。 甚至,我不能用C函数生成新文件。 谁能帮我一把?多谢各位 在iOS中对文件使用C函数时,您不能这样做 readFunction("filename.txt"); 您必须将路径(例如捆绑包中的文件)设置为 readFunction([[NSBundle main
谁能帮我一把?多谢各位 在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);
正如Chris Loonam所说,你不能仅仅通过文件名来访问文件,你需要使用-[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源文件 还请注意,您不能写入应用程序包。正如Chris在回答中所建议的那样,将Objective-C代码从
.C
文件中保留,而直接将cFullPath
传递到testFunction
可能更整洁。