- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是在我的 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/
我是一名优秀的程序员,十分优秀!