2013-04-28 53 views
0

我正在開發一個iPhone項目,我需要調用C文件中的一些C函數,比如myfile.c。我可以在其中調用一些函數。但是當我需要在C文件中打開一個文件。我得到了訪問錯誤(gdb)。我想要讀取的文件已放入項目文件夾並導入到項目中。即使我不能在C函數中創建一個新文件。 任何人都可以幫我一把嗎?非常感謝你。Object-C調用C函數讀取文件

+1

顯示一些代碼。 – 2013-04-28 21:32:05

+1

另請注意,您無法寫入應用程序包。 – 2013-04-28 21:32:51

回答

1

當使用C函數與iOS的文件,你不能這樣做

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); 
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源文件!

+0

正如克里斯在他的回答中所建議的那樣,將Objective-C代碼保存在'.c'文件中可能更簡單,而直接將'cFullPath'傳遞給'testFunction'。 – sapi 2013-04-28 23:01:20