
C言語を用いたファイルの一括削除について
C言語を用いたファイルの一括削除について
自分は、C言語でファイルの操作するプログラムを作成しているのですが、
たとえば、
out/temp1.jpg
out/temp2.jpg
out/temp3.jpg
ここで、"out/temp"という文字列が一致するファイルを一括で削除したいのですが、
これはどういった関数を用いれば実現できるでしょうか?
どうかよろしくお願いします。
投稿日時 - 2010-09-10 16:27:26
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)
対象となるファイルが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