• ベストアンサー

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

C言語を用いたファイルの一括削除について 自分は、C言語でファイルの操作するプログラムを作成しているのですが、 たとえば、 out/temp1.jpg out/temp2.jpg out/temp3.jpg ここで、"out/temp"という文字列が一致するファイルを一括で削除したいのですが、 これはどういった関数を用いれば実現できるでしょうか? どうかよろしくお願いします。

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

  • ベストアンサー
  • crossgate
  • ベストアンサー率65% (78/119)
回答No.1

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

SoltyRevant
質問者

お礼

ありがとうございます。 今回の質問でsystem関数の存在を知ることができ、 なんとか行き詰っていた問題も解決できました。 vipasigaru様も同等の解答をされていましたが、 現在の環境がUNIXだったのですが自分の説明不足で申し訳ありませんでした。。 tyatsumi様の解答でC言語を純粋に使って削除するアルゴリズムも拝見いたしまして、 こういう方法もあったのかと大変参考になりました。 今回は環境を推測してまで解答を下さったcrossgate様をベストアンサーにさせていただきます。

その他の回答 (2)

回答No.3

#include <stdlib.h> int main(void){ system("del temp*.jpg"); return 0; } とかでできるんじゃないっすか。

SoltyRevant
質問者

お礼

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

  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.2

対象となるファイルがoutディレクトリの中のものであれば、 opendir(), readdir(), closedir() を使ってディレクトリを読んで、 ループで個々にファイル名を比較することになります。 比較は例えば strncmp() を使って先頭の temp だけ一致しているものをすべてにするなら char path[1024]; // ↓ループの中で if (strncmp(filename, "temp", strlen("temp")) == 0) { sprintf(path, "out/%s", filename); unlink(path); } という感じに書けるでしょう。

SoltyRevant
質問者

お礼

System関数を用いず、pureCのみで処理を行った削除のプログラム、 拝見させていただきました。 自分にはそういったアルゴリズムが思いつきませんでした。 是非、参考にさせていただきます。m(_ _)m