[Source] File Divisor - C++

Started by Dark_Side, 25 de June , 2006, 09:55:08 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Dark_Side

Hi,
Relembrando a manipular arquivos em C++, fiz um pequeno programa que divide um determinando arquivo em fragmentos com tamanho determinando. O programa também gera um arquivo .BAT para unir os fragmentos.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
fstream entrada,saida,joinner;
char arquivo[255],nome[32],ext[4];

int size,x,n,total,chunk;
char *buffer;
int main(){
cout<< "Digite o caminho do arquivo a ser dividido:\n";
cin.getline(arquivo,255);
if(strcmp(arquivo,"")==0){cout << "Arquivo invalido!";cin.get();
return 0;}

entrada.open(arquivo,ios::in|ios::binary|ios::ate);
if(!entrada.is_open()){
cout << "Erro ao abrir o arquivo \"" << arquivo << "\"";
cin.get();
return 0;
}
sprintf(ext,"%s",strstr(arquivo,"."));
cout << "Digite um nome para arquivo de saida:\n";
cin.getline(nome,32);

cout<< "Digite o tamanho em KB para cada fragmento do arquivo:\n";
cin >> chunk;

if(chunk<=0){
cout << "Tamanho invalido!";
cin.get();
return 0;
}

chunk = chunk*1024;


cout << "Pressione qualquer tecla para iniciar o processo...\n";
cin.get();
size = (int) entrada.tellg();
x  = 0;
n = 0;
cin.get();
while(x<size)
{
if(size-x<chunk)
chunk = size-x;

buffer = new char[chunk];
sprintf(arquivo,"%d.%s",n,nome);
saida.open(arquivo,ios::out|ios::binary);
entrada.seekg(x);
memset(buffer,0,sizeof(buffer));
entrada.read(buffer,chunk);
saida.write(buffer,chunk);
x+=chunk;
n++;
saida.close();

system("cls");
total = x*100/size;
cout << total << "%" << " concluido" << " ("  << x/1024 << " KB de " << size/1024 << " KB)";
joinner.open("juntar_arquivos.bat",ios::out);
joinner << "echo off" << endl;
joinner << "copy /b *." << nome << " " << nome << ext << endl;
joinner << "del *." << nome << endl;
joinner.close();
}
entrada.close();
saida.close();
delete[] buffer;
cin.get();
return 0;
}
Bye.

#phobia

Oh!
Very good!!!

Muito útil neh... Parabéns pelo trabalho Dark_Side.   ;)

locator.dll

Ponto!

Continue a desempenhar o excelente trabalho que tem vindo a realizar no Security Darkers... ;)

vlw

locator.dll

rog

lol

estou justamente trabalhando num sistema desse

rog
realty.sys is corrupt :  reboot the universe (Y/N)