So, ich erstelle eine ausführbare C++ - Datei zum Zusammenführen von Dateien. Ich habe 43 Dateien mit einer Größe von jeweils 100MB. also insgesamt ca. 4,3GB.Das Zusammenführen von Dateien ohne Leerzeichen ist schneller als mit Leerzeichen
Zwei Fälle:
One: Wenn der Dateiname ist 1, 2, 3, 4, 5, 6, ..., 43 ca. 2 Minuten dauern Fusion zu beenden.
Zwei: Wenn der Dateiname This File.ova0, This File.ova1, ..., This File.ova42 ist, dauert es etwa 7 Minuten, um die Zusammenführung zu beenden.
Dies ist die gleiche genaue Datei, ich umbenenne die Datei. Irgendeine Idee, was ist los?
Dies ist der C++ Code
#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;
}
ich es durch .bat Datei wie folgt ausgeführt werden:
@ECHO OFF
Combiner.exe "This File.ova0" "This File.ova1" "This File.ova2"
PAUSE
oder
@ECHO OFF
Combiner.exe 1 2 3
PAUSE
beide .bat-Datei bis zum Ende geht von Dateiname, ich habe gerade 3 Dateien hier geschrieben, sonst wird es zu lang sein
Vielen Dank
Haben Sie mehrmals ausgeführt, um sicherzustellen, dass dies das Comman-Verhalten ist? – hmatar
ja .. Ich laufe es fast 10 mal, und das ist ungefähr die Zeit, die ich bekomme. – Harts
Da Sie C++ und nicht C verwenden, wäre es besser mit 'fstream' als' fopen'. – Foggzie