Τρόπος δημιουργίας μιας συνάρτησης FileCompare χρησιμοποιώντας το Visual C++ .NET ή Visual C++ 2005

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 816189 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο για να συγκρίνετε δύο αρχεία για να δείτε εάν τα περιεχόμενά τους είναι τα ίδια. Σύγκριση αυτή εξετάζει τα περιεχόμενα των δύο αρχείων, αλλά δεν δεν με τα ονόματα των αρχείων, θέσεις, ημερομηνίες, ώρες ή άλλα χαρακτηριστικά.

Αυτή η λειτουργικότητα είναι παρόμοια με το Fc.exe Μ-s-DOS βοηθητικού προγράμματος που περιλαμβάνεται με διάφορες εκδόσεις των Microsoft Windows και του Microsoft MS-DOS, και ορισμένα εργαλεία ανάπτυξης.

Το δείγμα κώδικα που περιγράφεται σε αυτό το άρθρο πραγματοποιεί μια σύγκριση ανά byte μέχρι να βρεθεί μια ασυμφωνία ή μέχρι να φτάσετε στο τέλος του αρχείου. Ο κώδικας εκτελεί επίσης τους ακόλουθους δύο απλές ελέγχους για να αυξήσετε την αποτελεσματικότητα της σύγκρισης:
  • Εάν και οι δύο αναφορές σημείο στο ίδιο αρχείο, τα δύο αρχεία πρέπει να είναι ίσες.
  • Εάν το μέγεθος των δύο αρχείων διαφορετικές, τα δύο αρχεία είναι διαφορετικές.

Δημιουργία του δείγματος

  1. Ξεκινήστε το Visual Studio .NET (2003) ή Microsoft Visual Studio 2005.
  2. Στο διακομιστήFILEμενού, σημείοΝέα, και στη συνέχεια κάντε κλικ στο κουμπίΤο έργο.
  3. Κάντε κλικΈργα Visual C++underΤύποι έργου, και στη συνέχεια κάντε κλικ στο κουμπίΚενό έργο (.NET)underΠρότυπα. Το όνομα του έργουFileCompare.

    ΣΗΜΕΙΩΣΗΣτο Visual Studio 2005, κάντε κλικ στο κουμπίΤο Visual C++underΤύποι έργου, και στη συνέχεια κάντε κλικ στο κουμπίΚενό έργοunderΠρότυπα.
  4. Στην Εξερεύνηση των λύσεων, κάντε δεξιό κλικFileCompare, τοποθετήστε το δείκτηADD, και στη συνέχεια κάντε κλικ στο κουμπίΠροσθήκη νέου στοιχείου.
  5. ΣτοΠροσθήκη νέου στοιχείουπαράθυρο διαλόγου, κάντε κλικ στο κουμπίΑρχείο κεφαλίδαςunderΠρότυπα. ΣτοNAMEπλαίσιο κειμένου, πληκτρολογήστεΦόρμα1, και στη συνέχεια κάντε κλικ στο κουμπίOpen. Εμφανίζεται το αρχείο Form1.h.
  6. Επικολλήστε τον ακόλουθο κώδικα στο αρχείο Form1.h:
    #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)
    		{	 
    		}
    
    	};
    }
    Αυτός ο κώδικας δημιουργεί μια φόρμα που περιέχει δύο στοιχεία ελέγχου πλαισίου κειμένου και ενός κουμπιού εντολής.

    ΣΗΜΕΙΩΣΗΠρέπει να προσθέσετε το κοινό επιλογή μεταγλωττιστή υποστήριξη χρόνου εκτέλεσης γλώσσας (/ clr:oldSyntax) στο Visual C++ 2005 να μεταγλωττιστεί με επιτυχία το προηγούμενο δείγμα κώδικα. Για να προσθέσετε κοινή επιλογή μεταγλωττιστή υποστήριξη χρόνου εκτέλεσης γλώσσας Visual C++ 2005, ακολουθήστε τα εξής βήματα:
    1. Κάντε κλικΤο έργο, και στη συνέχεια κάντε κλικ στο κουμπί<projectname></projectname>Ιδιότητες (Properties).

      ΣΗΜΕΙΩΣΗ<projectname></projectname>είναι ένα σύμβολο κράτησης θέσης για το όνομα του έργου.
    2. expandΙδιότητες παραμέτρων, και στη συνέχεια κάντε κλικ στο κουμπίΓενικά.
    3. Κάντε κλικ στην επιλογήΚοινές υποστήριξης χρόνου εκτέλεσης γλώσσας, παλιά σύνταξη (/ clr:oldSyntax)ΣτοΚοινό υποστήριξη χρόνου εκτέλεσης γλώσσαςρύθμιση στο δεξιό τμήμα του παραθύρου του Project, κάντε κλικ στο κουμπίΕφαρμογή, και στη συνέχεια κάντε κλικ στο κουμπίOk.
    Για περισσότερες πληροφορίες σχετικά με το χρόνο εκτέλεσης κοινής γλώσσας υποστηρίζει την επιλογή μεταγλωττιστή, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:
    /CLR (κοινές μεταγλώττισης κατά το χρόνο εκτέλεσης γλώσσας)
    http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx
  7. Προσθέστε την ακόλουθη συνάρτηση με τοΦόρμα1CLASS:
    // 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. Επικολλήστε τον ακόλουθο κώδικα στο στοΚάντε κλικσυμβάν από τοbutton1_Clickκουμπί εντολής τοΦόρμα1CLASS:
    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, τοποθετήστε το δείκτηADD, και στη συνέχεια κάντε κλικ στο κουμπίΠροσθήκη νέου στοιχείου.
  10. ΣτοΠροσθήκη νέου στοιχείουπαράθυρο διαλόγου, κάντε κλικ στο κουμπίΑρχείο C++underΠρότυπα. ΣτοNAMEπλαίσιο κειμένου, πληκτρολογήστεFile_Compare, και στη συνέχεια κάντε κλικ στο κουμπίOpen. Εμφανίζεται το αρχείο File_Compare.cpp.
  11. Επικολλήστε τον ακόλουθο κώδικα στο αρχείο File_Compare.cpp:
    #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. Επικολλήστε τον ακόλουθο κώδικα στο στοWinMainFunction:
    System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
    Application::Run(new Form1());
    return 0;
  14. Αποθηκεύστε το δείγμα.

Εκτελέστε το δείγμα

  1. Παροχή πλήρων διαδρομών σε δύο αρχεία με τα στοιχεία ελέγχου πλαισίου κειμένου.
  2. Κάντε κλικΣύγκριση.

Αναφορές

Για περισσότερες πληροφορίες, επισκεφθείτε τις ακόλουθες τοποθεσίες Web Microsoft Developer Network (MSDN):
Ο χώρος ονομάτων System.IO
Το αρχείο Access μέσω της κλάσης FileStream

Ιδιότητες

Αναγν. άρθρου: 816189 - Τελευταία αναθεώρηση: Τετάρτη, 22 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Λέξεις-κλειδιά: 
kbhowtomaster kbhowto kbio kbmt KB816189 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:816189

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com