示例#1
0
        /* Methode zum Vergleichen von zwei Dateien */
        public static bool CompareFiles(string fileName1, string fileName2,
                                        FileCompareMethod compareMethod)
        {
            // Wenn beide Dateinamen identisch sind true zurückgeben
            if (fileName1 == fileName2)
            {
                return(true);
            }

            // Über FileInfo-Objekte das Datum der letzten Änderung vergleichen
            // sofern dies gewünscht ist
            // Anmerkung: Das Erstelldatum wird nicht verglichen, weil dieses
            // beim Kopieren von Dateien auf das aktuelle Datum gesetzt wird
            if (compareMethod == FileCompareMethod.DateAndContent ||
                compareMethod == FileCompareMethod.Date)
            {
                FileInfo fi1 = new FileInfo(fileName1);
                FileInfo fi2 = new FileInfo(fileName2);
                if (fi1.LastWriteTime != fi2.LastWriteTime)
                {
                    return(false);
                }
            }

            // Den Inhalt vergleichen sofern dies gewünscht ist
            if (compareMethod == FileCompareMethod.DateAndContent ||
                compareMethod == FileCompareMethod.Content)
            {
                // FileStream-Objekte für den Vergleich erzeugen
                FileStream fs1 = new FileStream(fileName1, FileMode.Open);
                FileStream fs2 = new FileStream(fileName2, FileMode.Open);

                // Die Dateigröße vergleichen
                if (fs1.Length != fs2.Length)
                {
                    return(false);
                }

                // Die Dateien Byte für Byte vergleichen
                int fileByte1, fileByte2;
                do
                {
                    fileByte1 = fs1.ReadByte();
                    fileByte2 = fs2.ReadByte();
                } while (fileByte1 == fileByte2 && fileByte1 != -1);

                // Die Streams schließen
                fs1.Close();
                fs2.Close();

                // Das Ergebnis zurückgeben: Die Dateien sind gleich wenn an
                // dieser Stelle die zuletzt gelesenen Bytes identisch sind
                return(fileByte1 == fileByte2);
            }

            return(true);
        }
        /// <summary>
        /// Vergleich zwei Dateien
        /// </summary>
        /// <param name="filePath1">Pfad zur ersten Datei</param>
        /// <param name="filePath2">Pfad zur zweiten Datei</param>
        /// <param name="compareMethod">Angabe der Vergleichsmethode</param>
        /// <returns>Gibt true zurück, wenn beide Dateien entsprechend der
        /// angegebenen Vergleichsmethode gleich sind</returns>
        public bool CompareFiles(string filePath1, string filePath2, FileCompareMethod compareMethod)
        {
            bool result = false || filePath1 == filePath2;

            // Wenn beide Dateinamen identisch sind, true zurückgeben

            // Über FileInfo-Objekte das Datum der letzten Änderung vergleichen, sofern dies gewünscht ist.
            // Das Erstelldatum wird übrigens nicht verglichen, weil dieses beim Kopieren von Dateien
            // auf das aktuelle Datum gesetzt wird
            if (compareMethod == FileCompareMethod.DateAndContent || compareMethod == FileCompareMethod.Date)
            {
                var fi1 = new FileInfo(filePath1);
                var fi2 = new FileInfo(filePath2);
                if (fi1.LastWriteTime != fi2.LastWriteTime)
                {
                    result = false;
                }
            }

            // Den Inhalt vergleichen, sofern dies gewünscht ist
            if (compareMethod == FileCompareMethod.DateAndContent || compareMethod == FileCompareMethod.Content)
            {
                var fs1 = new FileStream(filePath1, FileMode.Open);
                var fs2 = new FileStream(filePath2, FileMode.Open);

                if (fs1.Length != fs2.Length)
                {
                    result = false;
                }

                int fileByte1, fileByte2;

                do
                {
                    fileByte1 = fs1.ReadByte();
                    fileByte2 = fs2.ReadByte();
                } while (fileByte1 == fileByte2 && fileByte1 != -1);

                fs1.Close();
                fs2.Close();

                result = (fileByte1 == fileByte2);
            }
            return(result);
        }
示例#3
0
        /// <summary>
        /// Vergleicht zwei Ordner
        /// </summary>
        /// <param name="folder1">Referenz auf ein DirectoryInfo-Objekt für den ersten Ordner</param>
        /// <param name="folder2">Referenz auf ein DirectoryInfo-Objekt für den zweiten Ordner</param>
        /// <param name="compareFileContent">Gibt an, ob der Dateiinhalt
        /// der in Ordner gespeicherten Dateien verglichen werden soll</param>
        /// <returns>Gibt true zurück, wenn beide Ordner identisch sind</returns>
        public bool CompareFolder(DirectoryInfo folder1, DirectoryInfo folder2, bool compareFileContent)
        {
            // Die Anzahl der Dateien im Ordner vergleichen
            FileInfo[] files1 = folder1.GetFiles();
            FileInfo[] files2 = folder2.GetFiles();
            if (files1.Length != files2.Length)
            {
                return(false);
            }

            // Die Dateien durchgehen und diese vergleichen
            foreach (FileInfo file1 in files1)
            {
                // Dateiname im zweiten Ordner ermitteln und überprüfen, ob die Datei existiert
                string fileName2 = Path.Combine(folder2.FullName, file1.Name);
                if (File.Exists(fileName2))
                {
                    FileCompareMethod compareMethod = compareFileContent ? FileCompareMethod.Content : FileCompareMethod.Date;

                    if (CompareFiles(file1.FullName, fileName2, compareMethod) == false)
                    {
                        return(false);
                    }
                }
                else
                {
                    // Datei existiert nicht, also sind die Ordner nicht identisch
                    return(false);
                }
            }

            // Die Anzahl der Unterordner vergleichen
            DirectoryInfo[] subFolders1 = folder1.GetDirectories();
            DirectoryInfo[] subFolders2 = folder2.GetDirectories();
            if (subFolders1.Length != subFolders2.Length)
            {
                return(false);
            }

            // Die Unterordner des ersten Ordners durchgehen um zu vergleichen, ob der
            // zweite Ordner dieselben Unterordner besitzt, und um diese rekursiv
            // durchzugehen
            foreach (DirectoryInfo subFolder1 in subFolders1)
            {
                // Ordnername des zweiten Ordners ermitteln und überprüfen, ob der
                // Ordner existiert
                string        folderPath2 = Path.Combine(folder2.FullName, subFolder1.Name);
                DirectoryInfo subFolder2  = new DirectoryInfo(folderPath2);
                if (subFolder2.Exists == false)
                {
                    return(false);
                }

                // Rekursiver Aufruf zum Vergleich der beiden Unterordner
                if (CompareFolder(subFolder1, subFolder2,
                                  compareFileContent) == false)
                {
                    return(false);
                }
            }

            // Wenn die Methode hier ankommt, enthalten beide (Unter-)Ordner einen
            // identischen Inhalt
            return(true);
        }