前段时间完成了公司的mac平台Simulation工程,近期开始开发IOS平台的。目前遇到的问题就是之前在mac平台的相对路径读写方法,但在ios平台并不work。
顺便回顾一下mac平台通过绝对路径的方法:
- 通过设置Product -> Scheme -> Edit Scheme -> Run -> Options -> use local working directory,设置到你想开始使用绝对路径的文件夹,即可使用相对路径进行读写文件。
- 在Xcode界面,在文件导航栏到开 Products 下的黑色控制块,右键选择 “Show in Finder”,将你需要读写的文件放在此处即可。
上面是mac使用相对路径写的方法,回到IOS尝试了第二种方法,但是并不work。
项目背景:
工程语言是C和C++混写,在构建iOS项目时,选择的Object-C语言,但是直接导入C/C++工程文件,同样可以识别并编译的。我需要从文件读取需要执行的文件模块以及操作参数,对模块进行一系列算法处理并将结果写入文件。
根据查阅,可行的技术方案:
-
使用Object-C++(新建Object-C文件,修改后缀.m为.mm即可生效),使用 NSBundle 进行操作,NSBundle可以获取到当前路径,指定读写的文件。(具体参考其他教程。因为需要产生额外新的文件,不利于项目管理,于是我没有采用这种办法。)
-
使用C/C++读写文件
中文网站关于这个的资料挺少的,于是我广泛搜索,找到这个宝贝:Writing to file in iOS using C/C++ ,他链接到另一个网页,解释IOS各个环境参数的含义:Development Chaos Theory 。参考上面两个博客就解决我的问题啦。下面大致介绍一下流程,详细内容见上面教程。
在 Window -> Devices and Simulators -> 选择你的应用 -> click 设置 -> Download containers(将其保存至你显眼的路径) ,
比如这就是我下载保存的xcappdta文件,右键-》 显示包内容
进入AppData后,就可以看见下面四个文件夹(自行搜索这四个文件夹分别的用处),进入Documents把你想读的文件放进去。
读写文件代码:
char buffer[256];
//HOME is the home directory of your application
//points to the root of your sandbox
strcpy(buffer,getenv("HOME"));
//concatenating the path string returned from HOME
strcat(buffer,"/Documents/myfile.txt");
//Creates an empty file for writing
FILE *f = fopen(buffer,"w");
//Writing something
fprintf(f, "%s %s %d", "Hello", "World", 2016);
//Closing the file
fclose(f);
最近才深刻体会,🔍大法好,All Questions will have answers.