C语言编程:如何创建一个父目录和手动插入文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程:如何创建一个父目录和手动插入文件?相关的知识,希望对你有一定的参考价值。
我的目标是,我的C程序中,做一个新的目录。在该目录中,我要创建15个简单的文本文件。我是卡在的部分是如何产生新创建的目录内的15个文本文件。我创建了这样的新目录:
mkdir("new_dir", 0755);
但我不确定如何在其中创建一个文本文件(在相同的程序)。任何提示吗?
我猜你是在一些POSIX系统。在C11标准(读n1570)不知道directories(由abstraction提供的operating system)。如果您使用的是Windows,它有不同的WinAPI(那么你应该使用CreateDirectory)
首先,你要mkdir(2)通话可能会失败(出于各种原因,包括事实目录确实存在的话)。而且很可能,你居然要创建主目录,你是在当前working directory创建它的目录或文件(例如离开内置到您的用户一些适当的和以前cd
壳的负担)。实事求是地讲,目录路径应该在运行时作为一个字符串(可能使用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); }
BTW,传递给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语言编程:如何创建一个父目录和手动插入文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C 语言的 windows 的 %appdata% 路径中创建目录并创建文件
Google App Engine:如何使用相同的父目录创建静态和动态文件?例如dir / css&dir / python?