プロが教えるわが家の防犯対策術!

先日、皆さんに教えていただき

Cで出力ファイルを指定のフォルダに出す方法が上手く出来ました。
具体的には、↓こうやって指定しました。
sprintf( buff, "%s\\%s", path, filename );

やっていて思ったのですが、
この方法だと、指定フォルダが最初から無いとエラーが出てしまいます。
フォルダが無かったら、作成し、その中にファイルを出力していってくれる。という方法はできるものなのでしょうか?

もしできるようなら教えて下さい!!
よろしくお願いします!

A 回答 (5件)

★回答ではないが余談。


・koko_u_ さんありがとう。
 気づくとアンダーバーの関数名で置き換わっているみたいですね。
 他にも気づくといろいろ置き換わっていますね。
 C 関数、最近使っていないのでアンダーバーの関数名で調べてみます。
・ありがとうございました。

●質問者さんへ。
・_mkdir() 関数が使える場合はその関数でもフォルダ(ディレクトリ)が作成できます。
 それでは。

参考URL:http://www5c.biglobe.ne.jp/~ecb/c/12_14.html
    • good
    • 0
この回答へのお礼

みなさん。丁寧な回答ありがとうございます!!

とても助かります!

さっそく、教えていただいたもの試してみたいと思います!!

ありがとうございました!!!

お礼日時:2007/07/19 20:21

>今、調べたら mkdir() 関数がないね。

何で?昔使った記憶があったのに?
_mkdir() に置き換えられているようですね。
    • good
    • 0

★回答者 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. …→『PathIsDirectory』
 http://nienie.com/~masapico/api_CreateDirectory. …→『CreateDirectory』
 http://nienie.com/~masapico/api_MakeSureDirector …→『MakeSureDirectoryPathExists』
 ↑
 この関数を使うと一気に深い階層のフォルダを作成できます。
 CreateDirectory() では1つづつしかフォルダを作成できません。
 つまり c:\path1\path2\path3 というフォルダを順番に
 c:\path1
 c:\path1\path2
 c:\path1\path2\path3
 と3段階で作成します。でも、MakeSureDirectoryPathExists() なら一気に作成してくれます。
・以上。
    • good
    • 0

ファイルのオープンはどのようなコードにしてますか?



一度にフォルダを作成して出力ファイルを作成するなどという便利な命令はありません

WinAPIなら
hFile = CreateFile( ... );
if (hFile == NULL ) {
 DWORD dwError = GetLastError();
 if ( dwError == ERROR_PATH_NOT_FOUND ) {
  // フォルダーを作成
  CreateDirectory(...);
  // ファイルの再オープン
  hFile = CreateFile( ... );
 } else {
  // 他のエラーの対処
 }
}

といった具合でしょう
# CreateFile/CreateDirectoryの引数などは ヘルプで確認してください
    • good
    • 1

★先にフォルダを作成させれば良い。


・単純にフォルダを作成させるのです。
 mkdir( path );
 sprintf( buff, "%s\\%s", path, filename );
 ↑
 mkdir() 関数は既にフォルダがあればエラーを返しますが『無視』すれば良いと思います。
 そうすれば、フォルダが存在しないと自動的に作成しますのでファイルもエラーにならない。
・以上。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A