You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:47:36