PDA

Orijinalini görmek için tıklayınız

eXTReMe Tracker
: c++ Dosyayı parcalara bölen program


em3
12-04-2007, 04:19 PM
Bu program komut satırından çalışmaktadır. Komut satırından arguman olarak parçalara ayrılacak kaynak dosyanın ismi ve her bir parçanın byte olarak uzunluğu alınmaktadır. Orneğin program bol sample.exe 2000 şeklinde çalıştırıldığında sample.exe isimli dosyayı 2000 byte'lık parçalara ayırmaktadır. Her bir parça dosyanın ismi part0001.nnn biçimindedir.

Kod:
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>

using namespace std;

int main(int argc, char **argv)
{
string sourcefile;
int chunk;

if (argc != 3) {
cout << "dosya ismi " << endl;
cin >> sourcefile;
cout << "kac bytelik parcalar : ";
cin >> chunk;
}
else {
sourcefile = argv[1];
chunk = atoi(argv[2]);
}

ifstream infile(sourcefile.c_str(), ios_base::binary);
if (!infile) {
cerr << "cannot open " << sourcefile << endl;
return 1;
}

char ch;
int byte_counter = 0;
int file_counter = 0;
ofstream outfile;
ostringstream destname;

while (infile.get(ch)) {
if (byte_counter % chunk == 0) {
destname << "part" << setfill('0') << setw(4) << ++file_counter << ".nnn";
outfile.open(destname.str().c_str(), ios_base::binary);
if (!outfile) {
cerr << "cannot create " << destname.str().c_str() << endl;
return 1;
}
}

outfile.put(ch);


if (++byte_counter % chunk == 0) {
outfile.close();
destname.str("");
}
}

cout << "total " << byte_counter << " bytes" << endl;
cout << "total " << file_counter << " files" << endl;

return 0;
}