Xcode中写入文件后,文件未在项目文件夹及系统中显示
Xcode中fopen创建的文件找不到的解决办法
问题根源
在Xcode中运行C程序时,默认工作目录并非你的项目文件夹,而是Xcode生成的DerivedData(派生数据)目录下的子文件夹。用相对路径(如"Test File.txt")调用fopen创建的文件,都会被写入这个默认目录,所以你在项目文件夹和常规系统搜索里找不到。
另外你的代码存在两处问题:
- 刚以写入模式创建
Test File.txt就立刻以读模式打开,此时文件为空,fscanf会读取失败,Number的值未定义 - 重复赋值
Write_File指针,第一次打开的Test File.txt未关闭就被覆盖,会造成资源泄漏
解决方法
方法1:定位默认工作目录
在代码开头添加以下代码,运行后控制台会打印当前工作目录,前往该路径就能找到生成的文件:
#include <stdio.h> #include <unistd.h> int main(void) { char cwd[1024]; if (getcwd(cwd, sizeof(cwd)) != NULL) { printf("当前工作目录: %s\n", cwd); } // 原有代码... }
方法2:修改Xcode工作目录为项目文件夹
- 打开Xcode,点击顶部菜单栏
Product→Scheme→Edit Scheme - 在弹出窗口中选择
Run→Options标签页 - 勾选
Working Directory,点击文件夹图标选择你的项目文件夹 - 重新运行程序,文件会直接生成在项目文件夹内
方法3:使用绝对路径
直接在fopen中指定文件的绝对路径,例如:
Write_File = fopen("/Users/你的用户名/Desktop/Test File.txt", "w");
注意替换为你自己的实际路径。
代码修复建议
使用文件后务必关闭指针,同时增加文件打开失败的判断,避免异常:
#include <stdio.h> #include <stdlib.h> int main(void) { int Number = 0; // 初始化变量 FILE* Read_File; FILE* Write_File1; FILE* Write_File2; // 打开并写入第一个文件,关闭后再读取 Write_File1 = fopen("Test File.txt", "w"); if (Write_File1 == NULL) { perror("无法打开Test File.txt"); exit(EXIT_FAILURE); } fprintf(Write_File1, "123"); fclose(Write_File1); // 打开读取文件 Read_File = fopen("Test File.txt", "r"); if (Read_File == NULL) { perror("无法打开Test File.txt"); exit(EXIT_FAILURE); } if (fscanf(Read_File, "%d", &Number) != 1) { printf("读取失败\n"); } fclose(Read_File); // 打开第二个写入文件 Write_File2 = fopen("New_File.txt", "w"); if (Write_File2 == NULL) { perror("无法打开New_File.txt"); exit(EXIT_FAILURE); } fprintf(Write_File2, "%s", "Test"); fclose(Write_File2); printf("Test\n"); printf("%d\n", Number); return 0; }
内容的提问来源于stack exchange,提问作者TheRecon007
相关产品推荐
相关产品推荐

