C编程:如何创建父目录并手动插入文件?
我的目标是,在我的C程序中,创建一个新的目录。在这个目录中,我想创建15个简单的文本文件。我一直关注的是如何在新创建的目录中生成15个文本文件。我创建了如下的新目录:C编程:如何创建父目录并手动插入文件?,c,file,directory,C,File,Directory,我的目标是,在我的C程序中,创建一个新的目录。在这个目录中,我想创建15个简单的文本文件。我一直关注的是如何在新创建的目录中生成15个文本文件。我创建了如下的新目录: mkdir("new_dir", 0755); 但是我不确定如何在同一个程序中创建一个文本文件。有什么建议吗 我猜你是在某个POSIX系统上。C11标准读取不知道您提供的。如果您使用的是Windows,则应使用不同的 首先,您对的调用可能由于各种原因而失败,包括目录确实存在的事实。而且很可能,您实际上希望在主目录中创建目录,或在
mkdir("new_dir", 0755);
但是我不确定如何在同一个程序中创建一个文本文件。有什么建议吗 我猜你是在某个POSIX系统上。C11标准读取不知道您提供的。如果您使用的是Windows,则应使用不同的 首先,您对的调用可能由于各种原因而失败,包括目录确实存在的事实。而且很可能,您实际上希望在主目录中创建目录,或在当前目录中创建目录的文档,例如,将一些适当的、先前的cd外壳内置的负担留给您的用户。实际上,目录路径应该在运行时作为字符串计算,可能使用or 因此,如果您想在用户的主目录中创建一个目录,请记住~/foo/是在globbing期间由扩展的,请参阅。。。;您需要从中获取主目录,代码如下:
char pathbuf[256];
snprintf(pathbuf, sizeof(pathbuf), "%s/new_dir", getenv("HOME"));
来计算那个字符串。当然,您需要处理snprintf的故障。我把这些支票留作练习。您可能希望将getenvHOME的结果保存在某些文件中
然后,您需要创建目录,并检查故障。至少使用并查看:
顺便说一句,传递给mkdir的模式可能不允许所有其他用户写入或访问它。如果允许,您可以获得一些安全性。所以我更喜欢0750而不是你的0755
最后,您需要在其中创建文件,可能需要在写入文件之前使用。所以有些代码
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); };
正如明智地评论的那样,还有其他方法
我的建议是记录一些惯例。您希望您的程序在当前工作目录中创建目录,还是在某个绝对路径中创建目录,可能与用户的主目录相关?如果您的程序由某个用户启动,并且没有或没有根权限,请参见不允许在任意位置创建目录或文件请参见
如果在Linux上,您最好阅读一些系统编程书籍,如或更新的。如果您使用不同的操作系统,您应该阅读其系统API的文档。snprintfbigbuffer,sizeofbigbuffer,%s/%s,new_dir,filename;然后是合适的打开操作fopen或使用bigbuffer作为文件名打开。这个主题有无数的变化。在这种情况下,什么是bigbuffer?char bigbuffer[4096];顺便提一下,另一个选项可能是chdirnew_dir,我希望它实际上是一个变量,而不是mkdir后面的常量字符串,然后在当前目录中创建15个文件。另一个选择是像mkdir命令一样,将要创建的目录的名称作为程序的参数,并尝试创建它。如果您需要代码来创建目录的路径,您可以查看在接受的答案中具有双语言C和C++功能的测试程序。
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); };