diff --git a/CreateCargo.cpp b/CreateCargo.cpp index 845a915..bad0dc7 100644 --- a/CreateCargo.cpp +++ b/CreateCargo.cpp @@ -243,32 +243,40 @@ std::vector CreateCargo::ComputingHeadFiles() size_t size = f.tellg(); f.seekg(0, std::ios::beg); - //Wczytanie pliku do pamięci - std::vector buffer(size); - f.read(buffer.data(), size); - f.close(); + if (size > MAX_FILE_SIZE) + { + std::cerr << path << " is too large. It exceeds 2GB!" << std::endl; + } + else + { + //Wczytanie pliku do pamięci + std::vector buffer(size); + f.read(buffer.data(), size); + f.close(); - //Tworzenie hashu CRC - const uint64_t crc = XXH64(buffer.data(), buffer.size(), VERSION); + //Tworzenie hashu CRC + const uint64_t crc = XXH64(buffer.data(), buffer.size(), VERSION); - //Kompresjia - std::vector pakBuffer; - computingBytes(file.parameter, buffer, pakBuffer); + //Kompresjia + std::vector pakBuffer; + computingBytes(file.parameter, buffer, pakBuffer); - FilesTable ft; - ft.nameFile = path; - ft.nameLen = path.length(); - ft.hashName = fnv64(path); - ft.offset = offset; - ft.size = pakBuffer.size(); - ft.flag = file.parameter; - ft.crc = crc; + FilesTable ft; + ft.nameFile = path; + ft.nameLen = path.length(); + ft.hashName = fnv64(path); + ft.offset = offset; + ft.size = pakBuffer.size(); + ft.flag = file.parameter; + ft.crc = crc; - cargo.write(reinterpret_cast(pakBuffer.data()), pakBuffer.size()); + cargo.write(reinterpret_cast(pakBuffer.data()), pakBuffer.size()); - filesTable.push_back(ft); - offset += pakBuffer.size(); + filesTable.push_back(ft); + offset += pakBuffer.size(); + } } + return filesTable; } diff --git a/CreateCargo.h b/CreateCargo.h index e11d253..ddbb0cf 100644 --- a/CreateCargo.h +++ b/CreateCargo.h @@ -87,6 +87,9 @@ private: std::ofstream cargo; uint64_t offset; + // Progress + std::atomic progress; + // Tworzenie listy plików do spakowania diff --git a/DataStruct.h b/DataStruct.h index d941faf..db9318a 100644 --- a/DataStruct.h +++ b/DataStruct.h @@ -70,7 +70,7 @@ struct FilesTable std::string nameFile; uint64_t hashName; uint64_t offset; - uint32_t size; + uint64_t size; uint64_t crc; int16_t flag; }; \ No newline at end of file