我用C ++编写了一个Windows程序,它使用了copy terminal命令。我试图将其更改为cp,但它的工作方式与Windows上的复制方式不同。在Windows上,运行shell命令的默认目录是应用程序所在的目录。在Mac上,我显然需要指定一个完整的文件路径。我希望尽可能简化最终用户的流程,因为我想要的文件应该始终与可执行文件位于同一个文件夹中,所以如果我可以简单地复制文件而不要求他们指定位置。
答案 0 :(得分:2)
您可以使用_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相比......)并且可以为您提供更好的错误检查和报告。
答案 1 :(得分:2)
使用boost::filesystem::copy_file复制文件简单易行。不幸的是,你的主要问题归结为获取可执行文件的路径,并且no portable way to do it。