2014-01-20 37 views
9

我使用fopen("aaa\bbb\ccc\myfile.txt","w")来创建输出文件。但文件夹aaa,bbbccc不存在。解决这个问题的最好方法是什么?是否有任何标准的方式来问fopen创建所有需要的文件夹?用fopen创建所有需要的文件夹

+7

没有,'fopen'不会让目录。有一个关于扩展'mkdir()'的问题,已经有了很好的答案(http://stackoverflow.com/questions/2336242/recursive-mkdir-system-call-on-unix/11425692)与你想要的相似。你需要在''aaa/bbb/ccc /“'上执行多级mkdir,然后调用'fopen'。 –

+1

对于Windows,你可以使用这篇文章中的信息http://stackoverflow.com/questions/2834737/creating-new-folders-if-the-dont-exist-for-fopen – alexJones

+1

记得加倍反斜杠,一般来说是。由于'fopen()'根本不支持创建目录,所以不会帮助解决这个问题,但是如果* dirs存在,它将是必要的。 – unwind

回答

-1

fopen()用于打开文本或二进制文件的输入流而不是目录文件。如果你想让你的文件在保存不存在目录的路径中打开,我建议你使用/sys/stat.h头文件的mkdir()方法。一旦你准备好了目录,你可以使用fopen()来打开你需要的文件(或者如果它不存在的话,可以创建它)。 这是我用我的$ HOME文件夹的目录中创建文件的方法: -

char* home_dir= getenv("HOME"); 
/*creates the directory with specified modes*/ 
mkdir(strcat(home_dir, "/make-a-note/"),S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); 
/*used the strcat() to generate the file-path.*/ 
personal_work=fopen(strcat(home_dir,"personal_work.txt"),"a+"); 
+0

不要使用该代码,'strcat()'调用是邪恶的:它肯定会超越持有环境变量内容的缓冲区。这种未定义的行为可能会破坏一些其他环境变量,或者更糟。 – cmaster

相关问题