c++ - 在 Mac 上使用 C++ 复制文件

标签 c++ macos file-copying

我用 C++ 为 Windows 编写了一个程序,它使用了复制终端命令。我试图将其更改为 cp,但它的工作方式与 Windows 上的复制不同。在 Windows 上,运行 shell 命令的默认目录是应用程序所在的目录。在 Mac 上,我显然需要指定完整的文件路径。我想为最终用户尽可能简化流程,因为我想要的文件应该始终与可执行文件位于同一文件夹中,所以最好是我可以简单地复制文件而不需要他们指定位置。

最佳答案

您可以使用 _NSGetExecutablePath() 获取可执行文件的位置。像这样的东西:

#include <stdio.h>
#include <mach-o/dyld.h>
#include <libgen.h>

// use some sensible size here
#define BUFSIZE 4096

uint32_t bufsize = BUFSIZE;
char exepath[BUFSIZE];
int result = _NSGetExecutablePath(exepath, &bufsize);
if (result == 0) { // _NSGetExecutablePath() worked
    char command[BUFSIZE];
    char *filename = "somefile.txt";
    char *destination = "/tmp/";
    sprintf(command, "/bin/cp %s/%s %s", dirname(exepath), filename, destination);
    result = system(command);
    if (result == // error checking here
}

您可以通过检查结果值并为 char 缓冲区使用动态大小来使其更加稳健。

为什么不使用 C/C++ 文件操作函数/类来复制文件,而是使用 system()?它们是可移植的(即,您不必担心 Windows 与 Mac OS 与 Linux 与……),并且可以说会为您提供更好的错误检查和报告。

关于c++ - 在 Mac 上使用 C++ 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691097/

相关文章:

c++ - 比较存储在 vector 中的类对象的私有(private)成员变量 - C++

c++ - 监视标准输出缓冲区并重定向到字符串 C++

c++ - QT - 将小部件添加到水平布局

r - 将包含在 Rstudio 插件包中的 .rmd 文件复制到用户定义的目录

c++ - 打印 Log4CXX 异常堆栈跟踪

macos - "ERROR: broken data stream when reading image file"(OS X 上的 TrueType 字体 libjpeg 和 PIL)

c - 为什么 Clang 的汇编器输出是有条件跳转到无条件跳转?

macos - 在 mac osx 终端应用程序中扩展 ascii 字符和 ansi

java - 在Java中将文件从一个文件夹复制到另一个文件夹

azure - 在发布管道期间将文件复制到 Azure 应用服务