मेरे पास दो फाइलें हैं जिन्हें मुझे तुलना करने की आवश्यकता है। मैं इसBoost.Test के साथ फ़ाइलों की तुलना कैसे करें?
BOOST_REQUIRE_EQUAL(filename1, filename2);
मेरे पास दो फाइलें हैं जिन्हें मुझे तुलना करने की आवश्यकता है। मैं इसBoost.Test के साथ फ़ाइलों की तुलना कैसे करें?
BOOST_REQUIRE_EQUAL(filename1, filename2);
आप फ़ाइल सामग्री की तुलना करने के लिए BOOST_CHECK_EQUAL_COLLECTIONS का उपयोग कर सकते हैं।
कोड का नमूना:
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
#include <fstream>
#include <iterator>
BOOST_AUTO_TEST_CASE(test)
{
std::ifstream ifs1("data1.txt");
std::ifstream ifs2("data2.txt");
std::istream_iterator<char> b1(ifs1), e1;
std::istream_iterator<char> b2(ifs2), e2;
BOOST_CHECK_EQUAL_COLLECTIONS(b1, e1, b2, e2);
}
फ़ाइलों जैसे कुछ का उपयोग करेगा? दोनों पढ़ें और सामग्री की तुलना करें।
मैं दो फ़ाइलों के हैश की तुलना करेंगे। हैश की गणना करने के लिए openssl लाइब्रेरी का उपयोग करने के उदाहरण बहुत हैं।
धन्यवाद, ForEveR उत्तर पढ़ने के बाद, मैंने इसे लगभग वैसे ही किया। लेकिन फ़ाइलों को खोलने के लिए बाइनरी मोड का उपयोग करना std :: ifstream ifs1 ("data1.txt", std :: ios :: बाइनरी); –
बाइनरी फाइलों में व्हाइटस्पेस को छोड़ने के लिए noskipws flag => std :: noskipws (ifs1) सेट करना न भूलें, अन्यथा इटरेटर किसी भी सफेद जगह को छोड़ देगा और \ n और \ n छोड़ा जाएगा लेकिन फाइलें अभी भी अलग हैं। – ovanes
ई 1 और ई 2 पुनरावृत्ति के अंत का संकेत दे रहे हैं। इटरेटर के प्रारंभ() और अंत() विधियों का उपयोग करना बेहतर नहीं होगा !? मैं इस तरह कुछ उपयोग कर रहा हूं (std :: vector के साथ): BOOST_CHECK_EQUAL_COLLECTIONS (b1.begin(), b1.end(), b2.begin(), b2.end()); –
Christian