से तेज है इसलिए, मैं फ़ाइलों को विलय करने के लिए एक C++ निष्पादन योग्य फ़ाइल बना देता हूं। मेरे पास 100 एमबी के आकार के साथ 43 फाइलें हैं। तो कुल 4.3 जीबी।अंतरिक्ष के बिना विलय फ़ाइल अंतरिक्ष
दो मामलों:
एक: फ़ाइल नाम हैं 1, 2, 3, 4, 5, 6, ..., 43 इसके बारे में 2 मिनट लगते हैं विलय खत्म करने के लिए।
दो: यदि फ़ाइल का नाम यह फ़ाइल है .ova0, यह File.ova1, ..., यह File.ova42 विलय समाप्त करने में लगभग 7 मिनट लगेंगे।
यह वही सटीक फ़ाइल है, मैं बस फ़ाइल का नाम बदलता हूं। कोई विचार क्या गलत है?
@ECHO OFF
Combiner.exe "This File.ova0" "This File.ova1" "This File.ova2"
PAUSE
या
@ECHO OFF
Combiner.exe 1 2 3
PAUSE
दोनों .bat फ़ाइल के अंत तक चला जाता है:
यह C++ कोड
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include "boost/filesystem.hpp"
namespace bfs = boost::filesystem;
#pragma warning(disable : 4244)
typedef std::vector<std::string> FileVector;
int main(int argc, char **argv)
{
int bucketSize = 3024 * 3024;
FileVector Files;
//Check all command-line params to see if they exist..
for(int i = 1; i < argc; i++)
{
if(!bfs::exists(argv[i]))
{
std::cerr << "Failed to locate required part file: " << argv[i] << std::endl;
return 1;
}
//Store this file and continue on..
std::cout << "ADDING " << argv[i] << std::endl;
Files.push_back(argv[i]);
}
//Prepare to combine all the files..
FILE *FinalFile = fopen("abc def.ova", "ab");
for(int i = 0; i < Files.size(); i++)
{
FILE *ThisFile = fopen(Files[i].c_str(), "rb");
char *dataBucket = new char[bucketSize];
std::cout << "Combining " << Files[i].c_str() << "..." << std::endl;
//Read the file in chucks so we do not chew up all the memory..
while(long read_size = (fread(dataBucket, 1, bucketSize, ThisFile)))
{
//FILE *FinalFile = fopen("abc def.ova", "ab");
//::fseek(FinalFile, 0, SEEK_END);
fwrite(dataBucket, 1, read_size, FinalFile);
//fclose(FinalFile);
}
delete [] dataBucket;
fclose(ThisFile);
}
fclose(FinalFile);
return 0;
}
मैं इस तरह .bat फ़ाइल के माध्यम से इसे चलाने है फ़ाइल का नाम, मैंने अभी यहां 3 फाइलें लिखी हैं, अन्यथा यह बहुत लंबा होगा
धन्यवाद
क्या आप यह सुनिश्चित करने के लिए कई बार चलाते हैं कि यह कमन व्यवहार है? – hmatar
हाँ .. मैं इसे लगभग 10 गुना चलाता हूं, और यह लगभग मुझे मिलता है। – Harts
चूंकि आप सी ++ का उपयोग कर रहे हैं और सी नहीं, तो आप 'fopen' से 'fstream' के साथ बेहतर हो जाएंगे। – Foggzie