Создание нового каталога в C - PullRequest
79 голосов
/ 15 сентября 2011

Я хочу написать программу, которая проверяет наличие каталога;если этот каталог не существует, он создает каталог и файл журнала внутри него, но если каталог уже существует, он просто создает новый файл журнала в этой папке.

Как бы я это сделал вС Linux?

Ответы [ 3 ]

121 голосов
/ 15 сентября 2011

Посмотрите на stat для проверки, существует ли каталог,

И mkdir, чтобы создать каталог.

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

struct stat st = {0};

if (stat("/some/directory", &st) == -1) {
    mkdir("/some/directory", 0700);
}

Руководство по этим функциям можно просмотреть с помощью команд man 2 stat и man 2 mkdir.

20 голосов
/ 15 сентября 2011

Вы можете использовать mkdir:

$ man 2 mkdir

 #include <sys/stat.h>
 #include <sys/types.h>

 int result = mkdir("/home/me/test.txt", 0777);
3 голосов
/ 28 февраля 2018

Я хочу написать программу, которая (...) создает каталог и (...) файл внутри него

, потому что это очень распространенный вопрос, вот код для создания нескольких уровней каталогов и вызова fopen. Я использую расширение GNU, чтобы напечатать сообщение об ошибке с помощью printf.

void rek_mkdir(char *path)
{
  char *sep = strrchr(path, '/' );
  if(sep != NULL) {
    *sep = 0;
    rek_mkdir(path);
    *sep = '/';
  }
  if( mkdir(path,0777) && errno != EEXIST )
    printf("error while trying to create '%s'\n%m\n",path ); 
}


FILE *fopen_mkdir( char *path, char *mode )
{
    char *sep = strrchr(path, '/' );
    if(sep ) { 
       char *path0 = strdup(path);
       path0[ sep - path ] = 0;
       rek_mkdir(path0);
       free(path0);
    } 
    return fopen(path,mode);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...