Mega Code Archive

 
Categories / C# / File Stream
 

Compares the content of 2 files

#region License and Copyright /* -------------------------------------------------------------------------  * Dotnet Commons IO  *  *  * This library is free software; you can redistribute it and/or modify it   * under the terms of the GNU Lesser General Public License as published by   * the Free Software Foundation; either version 2.1 of the License, or   * (at your option) any later version.  *  * This library is distributed in the hope that it will be useful, but   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY   * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License   * for more details.   *  * You should have received a copy of the GNU Lesser General Public License   * along with this library; if not, write to the   *   * Free Software Foundation, Inc.,   * 59 Temple Place,   * Suite 330,   * Boston,   * MA 02111-1307   * USA   *   * -------------------------------------------------------------------------  */ #endregion using System; using System.Collections; using System.Globalization; using System.IO; namespace Dotnet.Commons.IO {     class MainClass{         /// ---------------------------------------------------------------         /// <summary>         /// This method compares the content of 2 files. A return value of true         /// indicates that the contents of the files         /// are the same. A return value of false indicates that the          /// files are not the same.     /// </summary>     /// <param name="firstFile">first file to be compared against the second</param>     /// <param name="secondFile">second file to be compared against the first</param>     /// <returns>true if they are the same, false otherwise</returns>         /// <remarks>         /// This method has been modified to increase the speed in which this         /// file comparing operation performs.         ///          /// The MSDN knowledge base:         /// How to create a File-Compare function in Visual C#         /// http://support.microsoft.com/default.aspx?scid=kb;en-us;320348         /// was used to assist in speeding up this operation.         /// </remarks>         /// ---------------------------------------------------------------     public static bool Compare(FileInfo firstFile, FileInfo secondFile)     {       if (!firstFile.Exists)        {         string message = "File '" + firstFile.FullName + "' does not exist";         throw new FileNotFoundException(message);       }       if (!secondFile.Exists)        {         string message = "File '" + secondFile.FullName + "' does not exist";         throw new FileNotFoundException(message);       }       // Check Each byte       FileStream fs1 = new FileStream(firstFile.FullName, FileMode.Open, FileAccess.Read);             FileStream fs2 = new FileStream(secondFile.FullName, FileMode.Open, FileAccess.Read);                                   // Check the file sizes. If they are not the same, the files              // are not the same.             if (fs1.Length != fs2.Length)             {                 // Close the file                 fs1.Close();                 fs2.Close();                 // Return false to indicate files are different                 return false;             }             int file1byte;             int file2byte;             // 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();             // 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);     }                  /// <summary>         /// Compare the contents two files.         /// </summary>         /// <param name="firstFile">first file to be compared against the second</param>         /// <param name="secondFile">second file to be compared against the first</param>         /// <returns>true if they are the same, false otherwise</returns>         public static bool Compare(string firstFile, string secondFile)         {             FileInfo fiFirstFile = new FileInfo(firstFile);             FileInfo fiSecondFile = new FileInfo(secondFile);             return Compare(fiFirstFile, fiSecondFile);         }    } }