Iphone Object-C调用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

我正在做一个iPhone项目,我需要调用一些C函数,这些函数位于像myfile.C这样的C文件中。我可以调用其中的一些函数。但是当我需要在C文件中打开一个文件时。我获得了错误访问(gdb)。我要读取的文件已放入项目文件夹并导入到项目中。 甚至,我不能用C函数生成新文件。
谁能帮我一把?多谢各位

在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
可能更整洁。