MacOS下C语言如何将输出文件保存至可执行文件所在目录
如何将输出文件保存到可执行文件所在目录?
当前你的代码会把文件默认创建在运行程序时的工作目录(比如/Users/benreaby),要改成存到可执行文件自身所在的目录,需要先获取可执行文件的完整路径,再拼接目标文件名。以下是跨平台(macOS/Linux)的实现代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef __APPLE__ #include <mach-o/dyld.h> #elif __linux__ #include <unistd.h> #endif #define FILENAME "TACmFile.txt" int main(int argc, const char * argv[]) { char exec_path[1024]; uint32_t size = sizeof(exec_path); // 获取可执行文件的完整路径 #ifdef __APPLE__ if (_NSGetExecutablePath(exec_path, &size) != 0) { fprintf(stderr, "路径缓冲区太小,需要%d字节\n", size); return 1; } #elif __linux__ if (readlink("/proc/self/exe", exec_path, size) == -1) { perror("获取可执行路径失败"); return 1; } #endif // 截取可执行文件所在的目录部分 char *last_slash = strrchr(exec_path, '/'); if (last_slash != NULL) { *last_slash = '\0'; // 截断掉可执行文件名,只保留目录路径 } // 拼接目录与目标文件名,生成完整路径 char full_path[1024]; snprintf(full_path, sizeof(full_path), "%s/%s", exec_path, FILENAME); // 打开文件并写入内容 FILE *fp = fopen(full_path, "w"); if (fp == NULL) { perror("打开文件失败"); return 1; } fprintf(fp, "hello world"); fclose(fp); return 0; }
关键说明:
- 原代码中直接用
fopen(FILENAME, "w")是基于当前工作目录创建文件,和可执行文件的位置无关; - 通过
_NSGetExecutablePath(macOS)或readlink(Linux)获取可执行文件的绝对路径; - 截取路径中的目录部分后,拼接目标文件名,就能确保文件被创建在可执行文件所在的目录下。
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

