бинарное сравнение файлов 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 шт):

Автор решения: Dafter

Ваша проблема в цикле while, он выполняется до тех пор, пока в обоих файлах есть продолжение. Как в приведенном примере: 1 2 3 и 1 2 3 4 5, он дошел до 3, видит, что дальше элементов в первом файле нет и цикл заканчивается.

Наиболее простой способ решения: проверить после выхода из цикла, закончились ли оба файла и если нет сделать result = false

→ Ссылка