- PR -

バイナリデータを比較するには

投稿者投稿内容
ネーブル
常連さん
会議室デビュー日: 2006/08/26
投稿数: 27
投稿日時: 2006-09-17 08:34
諸農さん、いつもお世話になります、実は一晩中諸農さんが見事に解決された

件名:ProgressBarについて
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16832&forum=7

を弄ってC#のコードをC++に移植していましたが、どうしても一箇所デリゲートの部分で巧くいかず朝を迎えたところです、
解決できない場合は今のスレと切り分けて後ほど質問させていただきたく思いますのでご教授宜しくお願いいたします(^^;

引用:

ちょっと読みにくいですね(^^;


なかなか皆さんのように、分かりやすく綺麗に書けません(^^;
引用:

最初の差違だけが判ればいいと言うことですか。
スタート位置を指定できるようにした方がいいかも知れないですね。


手抜きですけど、先頭からのオフセット値を出力ようにしました。
引用:

なんか遠回りしているような。。


こんな感じでよろしいでしょうか?
引用:

binReader2が参照しているファイルサイズがbinReader1が参照しているファイルサイズよりも小さい場合はどうするのですか?


プログラムの頭でサイズの違う場合は処理を行わないように実装しました。
引用:

なぜnullptrの判定をしているのでしょうか?


ミスです、例外が発生したら単純にクローズ処理だけで済ますようにしました。

コード:
  private:
    // 転送データ比較
    void DataComparison( String^ SourceFile, String^ DestFile )
    {
      FileInfo^ sfi = gcnew FileInfo( SourceFile );                    // ファイルサイズが違う場合比較処理しない
      FileInfo^ dfi = gcnew FileInfo( DestFile );

      if ( sfi->Length != dfi->Length )
      {
        MessageBox::Show("ファイルサイズが違います");
        return;
      }
      else
      {
        FileStream^ sfs = File::OpenRead( SourceFile );
        BinaryReader^ sourceBinReader = gcnew BinaryReader(sfs);
        sourceBinReader->BaseStream->Position = 0;

        FileStream^ dfs = File::OpenRead(DestFile);
        BinaryReader^ destBinReader = gcnew BinaryReader(dfs);
        destBinReader->BaseStream->Position = 0;  

        Int16 sourceBinContent, destBinContent;

        Int64 i = 0;
        try
        {
          while (sourceBinReader->PeekChar() > -1)
          {
            sourceBinContent = sourceBinReader->ReadInt16();
            destBinContent = destBinReader->ReadInt16();
            if (sourceBinContent != destBinContent)
            {
              MessageBox::Show(Convert::ToString(i),"不一致です");
              break;
            }
            i++;
          }
          MessageBox::Show(Convert::ToString(i), "一致しました");
        }
        catch (Exception^ e)
        {
          MessageBox::Show(SourceFile, e->ToString());
        }
        finally
        {
          sourceBinReader->Close();
          destBinReader->Close();
        }
        return;
      }
    }

スキルアップ/キャリアアップ(JOB@IT)