it-swarm.cn

在C中创建一个新目录

我想编写一个检查目录是否存在的程序;如果该目录不存在,那么它会在其中创建目录和日志文件,但如果该目录已经存在,那么它只是在该文件夹中创建一个新的日志文件。

我将如何在C中使用Linux执行此操作?

77
Jeegar Patel

查看 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 statman 2 mkdir命令查看这些函数的手册。

117
Arnaud Le Blanc

你可以使用mkdir:

$ man 2 mkdir

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

 int result = mkdir("/home/me/test.txt", 0777);
19
Paul R

我想编写一个程序(...)创建目录和(...)文件

因为这是一个非常常见的问题,这里是创建多级目录而不是调用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);
}
2
Jens Harms