2014-01-20 4 views
9

私はfopen("aaa\bbb\ccc\myfile.txt","w")を使用して出力ファイルを作成しています。しかし、フォルダaaa,とcccは存在しません。この問題を解決する最良の方法は何ですか?必要なフォルダをすべて作成するようにfopenに依頼する標準的な方法はありますか?fopenですべての必要なフォルダを作成するには

+7

いいえ、 'fopen'ディレクトリを作ることはありません。複数のレベルを作る拡張された 'mkdir()'について、[既に良い答えで質問されている](http://stackoverflow.com/questions/2336242/recursive-mkdir-system-call-on-unix/11425692)があります。あなたが望むものに似ています。 '' aaa/bbb/ccc/''で複数レベルのmkdirを実行し、 'fopen'を呼び出す必要があります。 –

+1

ウィンドウの場合は、この記事の情報を使用することができますhttp://stackoverflow.com/questions/2834737/creating-new-folders-if-the-dont-exist-for-fopen – alexJones

+1

一般に、それらのバックスラッシュを倍にすることを忘れないでください。 。 'fopen()'は単にディレクトリの作成をサポートしていませんが、もし存在するならば必要になります。 – 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

関連する問題