/* 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); }
/// <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); }