Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程:如何创建父目录并手动插入文件?_C_File_Directory - Fatal编程技术网

C编程:如何创建父目录并手动插入文件?

C编程:如何创建父目录并手动插入文件?,c,file,directory,C,File,Directory,我的目标是,在我的C程序中,创建一个新的目录。在这个目录中,我想创建15个简单的文本文件。我一直关注的是如何在新创建的目录中生成15个文本文件。我创建了如下的新目录: mkdir("new_dir", 0755); 但是我不确定如何在同一个程序中创建一个文本文件。有什么建议吗 我猜你是在某个POSIX系统上。C11标准读取不知道您提供的。如果您使用的是Windows,则应使用不同的 首先,您对的调用可能由于各种原因而失败,包括目录确实存在的事实。而且很可能,您实际上希望在主目录中创建目录,或在

我的目标是,在我的C程序中,创建一个新的目录。在这个目录中,我想创建15个简单的文本文件。我一直关注的是如何在新创建的目录中生成15个文本文件。我创建了如下的新目录:

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); };