gpt4 book ai didi

C编程: How to create a parent directory and insert files manually?

转载 作者:行者123 更新时间:2023-11-30 14:42:01 25 4
gpt4 key购买 nike

我的目标是在我的 C 程序中创建一个新目录。在此目录中,我想创建 15 个简单的文本文件。我所困惑的部分是如何在新创建的目录中生成 15 个文本文件。我创建了这样的新目录:

mkdir("new_dir", 0755);

但我不确定如何在其中创建文本文件(在同一程序中)。有什么建议吗?

最佳答案

我猜您使用的是某种 POSIX 系统。 C11 标准(读取 n1570 )不知道 directories (abstraction 由您的 operating system 提供)。如果您使用的是 Windows,它有不同的 WinAPI (然后您应该使用 CreateDirectory )

首先,您调用mkdir(2)可能会失败(由于多种原因,包括该目录已经存在的事实)。很可能,您实际上想要在主目录中创建目录,或者在当前 working directory 中创建它的文档。 (例如,将一些适当且先前的内置 cd shell 的负担留给您的用户)。实际上,目录路径应该在运行时作为字符串计算(可能使用 snprintf(3)asprintf(3) )。

因此,如果您想在用户的主目录中创建一个目录(请记住 ~/foo/ 在通配过程中由 shell 展开,请参阅 glob(7) ...;您需要从 environ(7) 获取主目录),您可以编写如下代码:

char pathbuf[256];
snprintf(pathbuf, sizeof(pathbuf), "%s/new_dir", getenv("HOME"));

计算该字符串。当然,您需要处理失败( getenv(3)snprintf )。我将这些检查作为练习。您可能希望将 getenv("HOME") 的结果保留在某些 automatic variable 中.

然后你需要创建目录,并检查是否失败。至少(使用 perror(3) 并参见 errno(3) ):

 if (mkdir (pathbuf, 0750)) { perror(pathbuf); exit(EXIT_FAILURE); }

顺便说一句,传递给 mkdir 的模式可能不允许其他所有用户写入或访问它(如果允许,您可能会有一些安全性 vulnerability )。所以我更喜欢 0750 而不是你的 0755

最后你需要在其中创建文件,也许使用 fopen(3)在写入它们之前。所以一些代码像

int i = somenumber();
snprintf(pathbuf, sizeof(pathbuf),
"%s/new_dir/file%d.txt", getenv("HOME"), i);
FILE* f = fopen(pathbuf, "w");
if (!f) { perror(pathbuf); exit(EXIT_FAILURE); };

Jonathan Leffler明智的评论,还有其他方法。

我的建议是记录一些约定。您是否希望程序在当前工作目录中创建一个目录,或者在某个“绝对”路径中创建它,可能与用户的主目录相关?如果您的程序由某个用户启动(并且不是 setuid 或没有 root 权限,请参阅 credentials(7) ),则不允许在任意位置创建目录或文件(请参阅 hier(7) )。

如果在Linux上,你最好阅读一些系统编程书籍,例如ALP或更新的。如果您使用不同的操作系统,您应该阅读其系统API的文档。

关于C编程: How to create a parent directory and insert files manually?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com