こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語を用いたファイルの一括削除について

C言語を用いたファイルの一括削除について

自分は、C言語でファイルの操作するプログラムを作成しているのですが、
たとえば、

out/temp1.jpg
out/temp2.jpg
out/temp3.jpg

ここで、"out/temp"という文字列が一致するファイルを一括で削除したいのですが、
これはどういった関数を用いれば実現できるでしょうか?
どうかよろしくお願いします。

投稿日時 - 2010-09-10 16:27:26

QNo.6172406

すぐに回答ほしいです

質問者が選んだベストアンサー

C言語の関数だけで一括削除はムリです。

・outディレクトリ配下のファイル名を1個1個取得して「temp」という文字列があったらremove関数で削除する
・system関数使ってsystem("rm out/temp*")みたいにrmコマンドを実行する
(パスに「/」があったからOSはUNIX/Linux系と想像)
のどちらかです。

投稿日時 - 2010-09-10 17:25:46

お礼

ありがとうございます。
今回の質問でsystem関数の存在を知ることができ、
なんとか行き詰っていた問題も解決できました。

vipasigaru様も同等の解答をされていましたが、
現在の環境がUNIXだったのですが自分の説明不足で申し訳ありませんでした。。

tyatsumi様の解答でC言語を純粋に使って削除するアルゴリズムも拝見いたしまして、
こういう方法もあったのかと大変参考になりました。

今回は環境を推測してまで解答を下さったcrossgate様をベストアンサーにさせていただきます。

投稿日時 - 2010-09-12 20:04:09

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#include <stdlib.h>
int main(void){
system("del temp*.jpg");
return 0;
}

とかでできるんじゃないっすか。

投稿日時 - 2010-09-12 03:56:40

お礼

System関数を使えばこういった運用ができることを今回初めて知りました。
こちらはWindows環境での削除の方法ですね。
今後の参考にさせていただきおます。

投稿日時 - 2010-09-21 12:11:46

ANo.2

対象となるファイルがoutディレクトリの中のものであれば、
opendir(), readdir(), closedir() を使ってディレクトリを読んで、
ループで個々にファイル名を比較することになります。

比較は例えば strncmp() を使って先頭の temp だけ一致しているものをすべてにするなら

char path[1024];
// ↓ループの中で
if (strncmp(filename, "temp", strlen("temp")) == 0) {
sprintf(path, "out/%s", filename);
unlink(path);
}

という感じに書けるでしょう。

投稿日時 - 2010-09-10 17:35:29

お礼

System関数を用いず、pureCのみで処理を行った削除のプログラム、
拝見させていただきました。

自分にはそういったアルゴリズムが思いつきませんでした。
是非、参考にさせていただきます。m(_ _)m

投稿日時 - 2010-09-21 12:06:34