我正在開發一個iPhone項目,我需要調用C文件中的一些C函數,比如myfile.c。我可以在其中調用一些函數。但是當我需要在C文件中打開一個文件。我得到了訪問錯誤(gdb)。我想要讀取的文件已放入項目文件夾並導入到項目中。即使我不能在C函數中創建一個新文件。 任何人都可以幫我一把嗎?非常感謝你。Object-C調用C函數讀取文件
0
A
回答
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
相關問題
- 1. 函數讀取文件
- 2. 調用從.dat文件讀取數據的函數
- 3. 每次調用函數時讀取文件的下一行
- 4. 用C讀取Json文件#
- 5. 用C讀取文件#
- 6. 用c讀取Lua文件#
- 7. 用C++讀取文件
- 8. 從lib文件調用C++函數
- 9. Lua:從c函數調用中讀取表參數
- 10. 編程讀取可調用DLL函數
- 11. 提取函數名的C文件調用
- 12. 函數從文件讀入向量C++
- 13. 聲明函數文件不能讀取
- 14. 函數讀取bmp文件標頭
- 15. 在C中讀取文件讀取#
- 16. 從C中的txt文件讀取函數?
- 17. 從函數讀取文件中的意外行爲C
- 18. 讀取線程函數內的文件流C++
- 19. C++ CreateFile和fopen函數搶先讀取整個遠程文件
- 20. 用c讀取文本文件
- 21. 從.mm文件中的函數中調用C函數
- 22. C#從讀取文本文件中讀取二進制文件
- 23. C++數組和讀取文件
- 24. C#:從txt文件讀取數據
- 25. 從外部文件讀取參數 - C#
- 26. C:讀取文件到一個數組
- 27. 從文件中讀取整數C++
- 28. 從文件讀取字符數組,C
- 29. 讀取F90中的C數據文件
- 30. 從文件中讀取數據C
顯示一些代碼。 – 2013-04-28 21:32:05
另請注意,您無法寫入應用程序包。 – 2013-04-28 21:32:51