创建目录和存储文件(C编程)

时间:2015-10-25 17:11:43

标签: c directory

我想创建一个名称以进程ID结尾的目录(使其唯一),然后将我刚写入的新文件存储在该目录中。

我想要的是什么:

1)创建一个名为: mydirectory.1923 的新目录(进程ID号的示例)

2)使用

存储我刚刚创建的文件
FILE * fPointer = fopen("new.txt",w+)

进入 mydirectory.1923

到目前为止我所拥有的是:

int bufSize = 20;
int pid = getpid();
char *fileName = malloc(bufSize);
char *prefix = "that.rooms.";
snprintf(fileName, bufSize,"%s%d", prefix, pid);
printf("%s\n",fileName);
struct stat st = {0};
if (stat(fileName, &st) == -1) {
    mkdir(fileName, 0755);
}
DIR *dir = opendir (fileName);
if (dir != NULL) {

    FILE *fLib = fopen("library.txt" , "w+");
    fclose(fLib);

}
closedir(fileName);

return 0;

我的问题:

这段代码不起作用,显然它说的是DIR部分的错误。

如果我想创建目录,创建文件并将该文件直接存储到新目录,这是正确的做法吗?

有没有任何建议或建议比这更好?谢谢。

1 个答案:

答案 0 :(得分:1)

一些意见:

  • 如上所述,您应该为您的目录名称分配更多空间,5位数的pid会立即破坏您的代码。 <?php echo " echo "This is my &lt;id&gt;"; ?>
  • 中有宏PATH_MAXFILE_MAX
  • 您无需打开任何目录。这通常用于迭代目录中的项目。您只想在其中创建一个文件。
  • 即使您确实不需要它,limits.h函数也会收到closedir参数,我认为您的代码中会DIR *
  • 要在新目录中创建文件,您应该在创建路径中包含您的目录,或者在dir调用之前至少chdir包含该目录。我不建议使用后者,因为它会影响流程的工作目录。

下面是一个快速且脏的修补版本的代码,它会在里面创建目录和新文件,并考虑到上述内容:

fopen

稍微更改了变量名称,以便更清楚:

  • #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> #include <limits.h> int main(int argc, char **argv){ int pid = getpid(); char dirName[NAME_MAX+1]; char *prefix = "that.rooms."; snprintf(dirName, NAME_MAX + 1,"%s%d", prefix, pid); printf("%s\n",dirName); struct stat st = {0}; if (stat(dirName, &st) == -1) { if(mkdir(dirName, 0755) != -1){ char libPath[PATH_MAX+1]; snprintf(libPath, PATH_MAX + 1, "%s/library.txt", dirName); FILE *fLib = fopen(libPath , "w+"); fclose(fLib); }else{ perror("mkdir: "); } } return 0; } 用于保存目录名称。它使用dirName,因为这是文件名长度的系统限制
  • NAME_MAX用于保存您正在创建的libPath文件的路径。如果您的pid为3123,library.txt会在libPath来电后显示that.rooms.3123/library.txt。它使用snprintf,因为这是文件路径长度的系统限制。