Здравствуйте!
Пишу консольную программу, используя стандартные средства C/C++, без лишних зависимостей от boost, Gtk, Qt и т.д.
Требуется создать каталог в рабочем каталоге пользователя. А точнее, код должен уметь создавать каталог ~/.config/myprogram (учитывая, что ~/.config уже есть). И тут начинается веселье.
Вариант 1:
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
int main()
{
// char dirName[]="myprogram";
char dirName[]="~/.config/myprogram";
int result=mkdir(dirName, 0755);
if(result!=0)
{
printf("Cant create directory %s.\n", dirName);
return 1;
}
return 0;
}
- не работает. Если создать просто каталог «myprogram» - он нормально создается с каталоге запуска бинарника. Поэкспериментировав, понял, что походу не работает символ директории пользователя «~», так как к тому же нельзя создать каталог «~/myprogram».
Решил тогда попробовать создать каталог через интерпретатор командной строки, с помощью popen.
Вариант 2:
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
int main()
{
char cmd[250];
// char dirName[]="foodir";
char dirName[]="~/.config/foodir";
sprintf(cmd, "mkdir %s", dirName);
if(popen(cmd, "r")==NULL)
{
printf("Can't run command\n");
return 1;
}
return 0;
}
В этом варианте программа молча срабатывает, но каталог не создается. Ситуация та же самая: можно создать каталог в текущей директории бинарника, но создать каталог относительно рабочего каталога пользователя нельзя.
Что-то я не догоняю, как создать нужный каталог.