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

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

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

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

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

A 回答 (3件)

#include <stdlib.h>


int main(void){
system("del temp*.jpg");
return 0;
}

とかでできるんじゃないっすか。
    • good
    • 2
この回答へのお礼

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

お礼日時:2010/09/21 12:11

対象となるファイルがoutディレクトリの中のものであれば、


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

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

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

という感じに書けるでしょう。
    • good
    • 1
この回答へのお礼

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

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

お礼日時:2010/09/21 12:06

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



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

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

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

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

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

お礼日時:2010/09/12 20:04

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

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


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