2つのバッチファイルを比較してまったく同じものかを比較するには?

解決


どら  2006-03-29 11:33:38  No: 61058  IP: 192.*.*.*

久しぶりの投稿で・・・。
今会社で、あるバッチファイルが更新されているかをネットワーク経由で節句私用としています。
オリジナルのファイルと配布されたファイルを比較し、まったく同じであれば更新されたものとしてチェックをするプログラムを作ろうとしているのですが・・・

2つのファイルを比較して、その二つのファイルが同一のものかそうでないかを比較するような関数って存在するんでしょうか?
それとも、ファイルポインタなどで読み込んだファイルをインクリメントしながら比較するしかないのでしょうか?

よい方法がありましたら、おしえていただけないでしょうか?
よろしくお願いします。

あ、OSはWindows 2000またはXPで、VCは.net 2002/2003です。

編集 削除
YuO  2006-03-29 11:59:57  No: 61059  IP: 192.*.*.*

FC.EXEではだめなのですか?

ちなみに,標準関数に二つのファイルが同一かどうかを判定する関数はないですし,
CRTのカテゴリを見ても,そのようなものはなさそうです。

編集 削除
どら  2006-03-29 12:09:09  No: 61060  IP: 192.*.*.*

YuOさん

いつもご返答ありがとうございます。

>FC.EXEではだめなのですか?

> ちなみに,標準関数に二つのファイルが同一かどうかを判定する関数はないで
> すし,CRTのカテゴリを見ても,そのようなものはなさそうです。

なるほど・・・
そうすると、比較の結果を一時ファイルで取り出して、それを見てログに出力するようにするしかなさそうですね・・・。

ありがとうございます。
やってみます!!

編集 削除
dairygoods  2006-03-29 12:41:40  No: 61061  IP: 192.*.*.*

単純な比較でよければ、1文字づつ読んで比較したほうが簡単では?

#include <fstream>
#include <iterator>
#include <algorithm>

bool compare(const char* path1, const char* path2)
{
  using namespace std;

  ifstream file1(path1);
  ifstream file2(path2);

  return equal(
    istream_iterator<char>(file1),
    istream_iterator<char>(),
    istream_iterator<char>(file2)) && file2.eof();
}


状況によっては、ファイルの更新日時の比較だけでもOKでしょう。

編集 削除
どら  2006-04-01 15:58:00  No: 61062  IP: 192.*.*.*

YuOさん、dairygoodsさん。
返事ありがとうございます。
とりあえずは、バッチファイルなのでテキスト形式での読み込み比較していく方法で作成しました。

今後の汎用性も考えて、どんなファイルでもうまく比較できるようなものが作れたらと思ったのですが、仕方ないですね(^^;

本当にありがとうございました。

編集 削除