бинарное сравнение файлов C++
Пытаюсь написать консольную программу, которая позволяет выбрать две директории с файлами внутри, анализирует их(директории), находит там идентичные(бинарно) файлы и выводит список дубликатов. Проблема состоит в том, что при реализации сравнения, представленного в коде ниже, если один файл будет равен 1,2,3(в столбик, в одной папке) а другой 1,2,3,4,5(также в столбик,в другой папке) то программа выдает что они идентичны. То есть как я понимаю, каким то образом считает что одно является подмножеством другого и дает true. Буду очень благодарен если кто предложит решение и помощь^^ Код реализации метода сравнения файлов из двух разных каталогов:
#include <iostream>
#include <filesystem>
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
namespace fs = std::filesystem;
void Directory_iterator(){
fs::path dir1, dir2;
bool result = true;
cout << "Введите каталог 1:";
cin >> dir1;
cout << "Введите каталог 2:";
cin >> dir2;
if (!(fs::exists(dir1) && fs::exists(dir2)))
cout << "Неверно указаны директории, проверьте еще раз";
else {
for (const auto& p1 : fs::directory_iterator(dir1)) {
for (const auto& p2 : fs::directory_iterator(dir2))
{
ifstream fin1(p1, ios::binary);
ifstream fin2(p2, ios::binary);
if (fin1 && fin2) {
char ch1, ch2;
//bool result = true;
while (fin2.get(ch1) && fin1.get(ch2)) {
if (ch1 != ch2) {
result = false;
break;
}
}
if (result) {
cout << p1.path().u8string() << " , " << p2.path().u8string() << " Равны " << endl;
}
else
continue;
}
}
}
if (!result) { cout << "Совпадений не найдено"; }
}
}
Ответы (1 шт):
Ваша проблема в цикле while, он выполняется до тех пор, пока в обоих файлах есть продолжение. Как в приведенном примере: 1 2 3 и 1 2 3 4 5, он дошел до 3, видит, что дальше элементов в первом файле нет и цикл заканчивается.
Наиболее простой способ решения: проверить после выхода из цикла, закончились ли оба файла и если нет сделать result = false