- ベストアンサー
C ファイル出力で、フォルダがない場合でも作成する方法
先日、皆さんに教えていただき Cで出力ファイルを指定のフォルダに出す方法が上手く出来ました。 具体的には、↓こうやって指定しました。 sprintf( buff, "%s\\%s", path, filename ); やっていて思ったのですが、 この方法だと、指定フォルダが最初から無いとエラーが出てしまいます。 フォルダが無かったら、作成し、その中にファイルを出力していってくれる。という方法はできるものなのでしょうか? もしできるようなら教えて下さい!! よろしくお願いします!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
★回答ではないが余談。 ・koko_u_ さんありがとう。 気づくとアンダーバーの関数名で置き換わっているみたいですね。 他にも気づくといろいろ置き換わっていますね。 C 関数、最近使っていないのでアンダーバーの関数名で調べてみます。 ・ありがとうございました。 ●質問者さんへ。 ・_mkdir() 関数が使える場合はその関数でもフォルダ(ディレクトリ)が作成できます。 それでは。
その他の回答 (4)
- koko_u_
- ベストアンサー率18% (459/2509)
>今、調べたら mkdir() 関数がないね。何で?昔使った記憶があったのに? _mkdir() に置き換えられているようですね。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★回答者 No.1 です。 ・今、調べたら mkdir() 関数がないね。何で?昔使った記憶があったのに? 仕方が無いので Win32 API の CreateDirectory() を使って作成して下さい。 また、Win32 API を使うのならフォルダの有無をチェックしてフォルダが 存在していない場合に作成するようにします。 ・下のようになります。 サンプル: #include <shlwapi.h> #include <windows.h> if ( PathIsDirectory(path) ){ ←フォルダ有無 CreateDirectory( path, NULL ); ←フォルダ作成 } sprintf( buff, "%s\\%s", path, filename ); fp = fopen( buff, "w" ); : fclose( fp ); 参考文献: http://nienie.com/~masapico/api_PathIsDirectory.html→『PathIsDirectory』 http://nienie.com/~masapico/api_CreateDirectory.html→『CreateDirectory』 http://nienie.com/~masapico/api_MakeSureDirectoryPathExists.html→『MakeSureDirectoryPathExists』 ↑ この関数を使うと一気に深い階層のフォルダを作成できます。 CreateDirectory() では1つづつしかフォルダを作成できません。 つまり c:\path1\path2\path3 というフォルダを順番に c:\path1 c:\path1\path2 c:\path1\path2\path3 と3段階で作成します。でも、MakeSureDirectoryPathExists() なら一気に作成してくれます。 ・以上。
- redfox63
- ベストアンサー率71% (1325/1856)
ファイルのオープンはどのようなコードにしてますか? 一度にフォルダを作成して出力ファイルを作成するなどという便利な命令はありません WinAPIなら hFile = CreateFile( ... ); if (hFile == NULL ) { DWORD dwError = GetLastError(); if ( dwError == ERROR_PATH_NOT_FOUND ) { // フォルダーを作成 CreateDirectory(...); // ファイルの再オープン hFile = CreateFile( ... ); } else { // 他のエラーの対処 } } といった具合でしょう # CreateFile/CreateDirectoryの引数などは ヘルプで確認してください
- Oh-Orange
- ベストアンサー率63% (854/1345)
★先にフォルダを作成させれば良い。 ・単純にフォルダを作成させるのです。 mkdir( path ); sprintf( buff, "%s\\%s", path, filename ); ↑ mkdir() 関数は既にフォルダがあればエラーを返しますが『無視』すれば良いと思います。 そうすれば、フォルダが存在しないと自動的に作成しますのでファイルもエラーにならない。 ・以上。
お礼
みなさん。丁寧な回答ありがとうございます!! とても助かります! さっそく、教えていただいたもの試してみたいと思います!! ありがとうございました!!!