プロが教える店舗&オフィスのセキュリティ対策術

c言語でファイルを作成するディレクトリを指定する方法は分かるのですが
file1はフォルダ1,file2はフォルダ2と変化させながら作成する方法が分かりません。
上のように、ファイル名によって分別しながらファイルを作成することは可能ですか。可能なら、どのようにすればよいですか。

A 回答 (2件)

★単純にパス名をつけて作成すれば良いでしょう。


・『fopen("c:\\path1\\file1.txt","w");』
 『fopen("c:\\path2\\file2.txt","w");』
 『fopen("c:\\path3\\file3.txt","w");』
 『fopen("c:\\path4\\file4.txt","w");』
 とパス名を追加すれば分別しならがファイルを作成できます。
・あとパス名とファイル名を結合した文字列を渡す方法もあります。

サンプル:
static const char *path[] = {
 "c:\\path1",
 "c:\\path2",
 "c:\\path3",
 NULL,
}
static const char *file[] = {
 "file1.txt",
 "file2.txt",
 "file3.txt",
 NULL,
};
char buff[ 256 ];
FILE *fp;
int i, j;

for ( j = 0 ; path[j] != NULL ; j++ ){
 for ( i = 0 ; file[i] != NULL ; i++ ){
  sprintf( buff, "%s\\%s", path[j], file[i] );
  
  if ( (fp = fopen(buff,"w")) != NULL ){
   /*
   書き込み内容
   */
   fclose( fp );
  }
 }
}

作成ファイルのパスは:
c:\path1\file1.txt
c:\path1\file2.txt
c:\path1\file3.txt

c:\path2\file1.txt
c:\path2\file2.txt
c:\path2\file3.txt

c:\path3\file1.txt
c:\path3\file2.txt
c:\path3\file3.txt
※全部で 9 個のファイルが作成されます。
・以上。おわり。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
すみません、こちらの質問の仕方が悪かったです。
少し、求めていたのとは違いましたが、sprintfの部分は大変参考になりました。
ありがとうございました。

お礼日時:2007/03/17 01:32

フォルダ名やファイル名には連番が付いているのですか?


でしたら、sprintf関数あたりを使って、フォルダ名やファイル名を
格納する文字列にその連番を含めるようにすればよいと思います。

【例】
  FILE *fp;
  char filename[80];  /* 適切なサイズにする */
  int i;
  
  for (i = 1; i <= 5; i++) {    /* 5 は例 */
    sprintf(filename, "folder%d\\file%d", i, i)    /* Windows での例 */
    fp = fopen(filename, "w");    /* 書き込む場合の例 */
    if (!fp) {
      /* オープンできなかったときの処理 */
    }
    else {
    /*
     * そのファイルに関する処理
     */
    fclose(fp);
    }
  }


(注)インデントのため、全角空白を使っています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
filenameの部分にパスを組み込んで置いてもよかったのですね。
大変参考になりました。
ありがとうございました。 

お礼日時:2007/03/17 01:33

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