Visual C++ .NET または Visual C++ 2005 を使用して、FileCompare 関数を作成する方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:816189
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
この資料の Microsoft Visual C# .NET バージョン、について 320348 を参照してください。
この資料の Microsoft Visual Basic .NET バージョン、について 320346 を参照してください。
この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています:

System.IO

概要
このステップ バイ ステップ方法について説明を 2 つのファイルの内容が同じかどうかを比較します。 この比較は、2 つのファイルの内容を調べ、ファイル名、場所、日付、時刻、またはその他の属性ではなくは。

この機能は、- MS-DOS ベースの Fc.exe に似ていますが各種のバージョンの Microsoft Windows と Microsoft MS-DOS、およびいくつか開発ツールに含まれているユーティリティです。

この資料に記載されているサンプル コードは、ファイルの終わりに達するまで、または不一致が検出されるまで、バイトずつ比較します。 このコードは次の 2 つの比較の効率性を強化するの単純なチェックも実行します。
  • 同じファイルに参照ポイント両方場合で、2 つのファイルでなければなりません。
  • 場合は、2 つのサイズ別ファイル、2 ファイルは別です。

サンプルの作成

  1. Visual Studio .NET (2003) または Microsoft Visual Studio 2005 を起動します。
  2. [ ファイル ] メニューの [ 新規作成 ] をポイントし、[ プロジェクト ] をクリックします。
  3. [ プロジェクトの種類 ] で [ Visual C++ プロジェクト をクリックし、 空プロジェクト (.NET) [ テンプレート ] ボックスの一覧の [。 プロジェクトの名前 FileCompare

    メモ [Visual Studio 2005 で Visual C++ プロジェクトの種類 ] の [を [ テンプレート ] ボックスの一覧の [ 空のプロジェクト をクリックします。
  4. ソリューション エクスプローラーで、 FileCompare を右クリックして 追加 ] をポイントし、[ 新しい項目の追加 ] をクリックします。
  5. [新しい項目の追加 ] ダイアログします ヘッダー ファイル の [ テンプレート ] ボックスの一覧の [。 [ 名前 ] テキスト Form1 ] を入力し、[ ファイルを開く しています。 Form1.h ファイルが表示されます。
  6. Paste the following code in the Form1.h file:
    #pragma once#using <mscorlib.dll>#using <system.windows.forms.dll>#using <system.dll>#using <system.drawing.dll>namespace Compare{	using namespace System;	using namespace System::ComponentModel;	using namespace System::Collections;	using namespace System::Windows::Forms;	using namespace System::Drawing;	using namespace System::IO;	public __gc class Form1 : public System::Windows::Forms::Form	{		public:		Form1(void)		{			InitializeComponent();		}  	protected:		void Dispose(Boolean disposing)		{			if (disposing && components)			{				components->Dispose();			}			__super::Dispose(disposing);		}		private: System::Windows::Forms::TextBox *  textBox1;	private: System::Windows::Forms::TextBox *  textBox2;	private: System::Windows::Forms::Label *  label1;	private: System::Windows::Forms::Label *  label2;	private: System::Windows::Forms::Button *  Compare;	private:		System::ComponentModel::Container * components;				void InitializeComponent(void)		{			this->textBox1 = new System::Windows::Forms::TextBox();			this->textBox2 = new System::Windows::Forms::TextBox();			this->label1 = new System::Windows::Forms::Label();			this->label2 = new System::Windows::Forms::Label();			this->Compare = new System::Windows::Forms::Button();			this->SuspendLayout();			// 			// textBox1			// 			this->textBox1->Location = System::Drawing::Point(32, 104);			this->textBox1->Name = S"textBox1";			this->textBox1->TabIndex = 0;			this->textBox1->Text = S"";			// 			// textBox2			// 			this->textBox2->Location = System::Drawing::Point(168, 104);			this->textBox2->Name = S"textBox2";			this->textBox2->TabIndex = 1;			this->textBox2->Text = S"";			// 			// label1			// 			this->label1->Location = System::Drawing::Point(32, 64);			this->label1->Name = S"label1";			this->label1->TabIndex = 2;			this->label1->Text = S"File1";			// 			// label2			// 			this->label2->Location = System::Drawing::Point(176, 64);			this->label2->Name = S"label2";			this->label2->TabIndex = 3;			this->label2->Text = S"File2";			// 			// Compare			// 			this->Compare->Location = System::Drawing::Point(96, 168);			this->Compare->Name = S"Compare";			this->Compare->TabIndex = 4;			this->Compare->Text = S"Compare";			this->Compare->Click += new System::EventHandler(this, button1_Click);			// 			// Form1			// 			this->AutoScaleBaseSize = System::Drawing::Size(5, 13);			this->ClientSize = System::Drawing::Size(292, 273);			this->Controls->Add(this->Compare);			this->Controls->Add(this->label2);			this->Controls->Add(this->label1);			this->Controls->Add(this->textBox2);			this->Controls->Add(this->textBox1);			this->Name = S"Form1";			this->Text = S"Form1";			this->ResumeLayout(false);		}	private:		System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)		{	 		}	};}
    このコードは 2 つのテキスト ボックス コントロールとコマンド ボタンを含むフォームを作成します。

    メモ 共通言語ランタイム サポート コンパイラ オプションを追加する (または clr:oldSyntax) 正常に上記のコード サンプルをコンパイルする Visual C++ 2005 で。 追加する、共通言語ランタイム サポート コンパイラ オプション Visual C++ 2005 には、次の手順に従います。
    1. プロジェクト ] をクリックして [<ProjectName> プロパティ

      メモ <ProjectName> は、プロジェクトの名前のプレースホルダーです。
    2. [構成プロパティ ] を展開し、[ 全般 しています。
    3. [印刷] をクリック 共通言語ランタイム サポート、古い構文 (または clr:oldSyntax) 共通言語ランタイム サポート のプロジェクト設定右側のウィンドウで [で [ 適用 ] をクリックを [OK] をクリックします。
    共通言語ランタイムの詳細についてサポート コンパイラ オプションは、次のマイクロソフト Web サイトを参照してください。
    /clr (共通言語ランタイムのコンパイル)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
  7. Form1 クラスに次の関数を追加:
    // This method accepts two strings that represent two files to // compare. A return value of 0 indicates that the contents of the files// are the same. A return value of any other value indicates that the // files are different.private:bool FileCompare(String *file1, String *file2){	int file1byte;	int file2byte;	FileStream *fs1;	FileStream *fs2;    	// Determine if the same file was referenced two times.	if (String::Equals(file1,file2))	{		// Return true to indicate that the files are the same.		return true;	}        	// Open the two files.	try	{		fs1 = new FileStream(file1, FileMode::Open);		fs2 = new FileStream(file2, FileMode::Open);				    		// Check the file sizes. If the sizes are different, the files 		// are different.		if (fs1->Length != fs2->Length)		{			// Close the file			fs1->Close();			fs2->Close();			// Return false to indicate files are different			return false;		}		// Read and compare a byte from each file until either a		// non-matching set of bytes is found or until the end of		// file1 is reached.		do 		{			// Read one byte from each file.			file1byte = fs1->ReadByte();			file2byte = fs2->ReadByte();		}		while ((file1byte == file2byte) && (file1byte != -1));		// Close the files.		fs1->Close();		fs2->Close();	}		catch(Exception *ex)	{		if(fs1)		{			fs1->Close();		}		if(fs2)		{			fs2->Close();		}		throw ex;	}	// Return the success of the comparison. "file1byte" is 	// equal to "file2byte" at this point only if the files are 	// the same.	return ((file1byte - file2byte) == 0);}
  8. Form1 クラスに button1_Click コマンド ボタンに、 クリックして イベントに次のコードを貼り付けます:
    try{	if (FileCompare(this->textBox1->Text, this->textBox2->Text))	{		MessageBox::Show("Files are equal.");					}	else	{		MessageBox::Show("Files are not equal.");	}}catch(Exception *ex){	MessageBox::Show(ex->Message);}
  9. ソリューション エクスプローラーで、 FileCompare を右クリックして 追加 ] をポイントし、[ 新しい項目の追加 ] をクリックします。
  10. [新しい項目の追加 ] ダイアログします C++ ファイル [ テンプレート ] ボックスの一覧の [。 [ 名前 ] テキスト File_Compare を入力し、[ ファイルを開く しています。 File_Compare.cpp ファイルが表示されます。
  11. 次のコードを貼り付け、File_Compare.cpp file:
    #include "form1.h"#include <windows.h>#include <tchar.h>using namespace Compare;
  12. 次の WinMain 関数は、File_Compare.cpp ファイルに追加:
    int APIENTRY _tWinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPTSTR    lpCmdLine,                     int       nCmdShow){}
  13. 次のコード WinMain 関数に貼り付けます:
    System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;Application::Run(new Form1());return 0;
  14. このサンプルを保存します。

サンプルを実行します。

  1. テキスト ボックス コントロール内の 2 つのファイルへの完全なパスを指定します。
  2. [ 比較 ] をクリックします。
関連情報
詳細については、次のマイクロソフトの開発者用ネットワーク (MSDN) の Web サイトを参照してください。
System.IO 名前空間
ファイル アクセス、FileStream クラスを使用

警告: この記事は自動翻訳されています

プロパティ

文書番号:816189 - 最終更新日: 01/17/2015 06:55:20 - リビジョン: 2.3

Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbhowto kbhowtomaster kbio kbmt KB816189 KbMtja
フィードバック
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)