- ベストアンサー
ファイルの作成場所の分別
c言語でファイルを作成するディレクトリを指定する方法は分かるのですが file1はフォルダ1,file2はフォルダ2と変化させながら作成する方法が分かりません。 上のように、ファイル名によって分別しながらファイルを作成することは可能ですか。可能なら、どのようにすればよいですか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
フォルダ名やファイル名には連番が付いているのですか? でしたら、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); } } (注)インデントのため、全角空白を使っています。
その他の回答 (1)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★単純にパス名をつけて作成すれば良いでしょう。 ・『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 個のファイルが作成されます。 ・以上。おわり。
お礼
回答ありがとうございます。 すみません、こちらの質問の仕方が悪かったです。 少し、求めていたのとは違いましたが、sprintfの部分は大変参考になりました。 ありがとうございました。
お礼
回答ありがとうございます。 filenameの部分にパスを組み込んで置いてもよかったのですね。 大変参考になりました。 ありがとうございました。