Вы можете использовать _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 против…) и, возможно, дадут вам лучшую проверку ошибок и отчетность.