Bienvenido a Tecnohackers

Tecnohackers » Programacion » Area de Programacion » Programacion a Bajo Nivel. APIs, Hooking, ASM, C/C++, etc.
 » 

Divisor de Archivos



Autor Tema: Divisor de Archivos  (Leído 862 veces)

Desconectado P4|3L0

  • Asiduo
  • *
  • Mensajes: 75
  • TecnoHacker un nuevo proyecto.
    • http://www.tecnohacker.com
Divisor de Archivos
« en: Diciembre 29, 2009, 05:01:37 pm »
Pues estuve siguiendo con C++ y me encontre con una función muy interesante en fstream, que es la posibilidad de hacer una especie de "divisor de archivos" meti la posibilidad de darle otra extension al archivo dividido.

Pongo el code y lo explico luego:

Código: You are not allowed to view links. Register or Login
#include <iostream>
#include <fstream>
#include <windows.h> //usalo si vas  a usar el GetFileAtributes

using namespace std;
char FileName[MAX_PATH] = "",ext[5] = "",archivo2[] = "",bytes[20][10000000];
int Num,tam,posicionmemoria = 0,sizeyadividido;

int main(void)
{
    cout << "\nEscribe un archivo existente: ";
    cin.getline(FileName, MAX_PATH);

    if(GetFileAttributes(FileName) ==  0xFFFFFFFF)
    {
    cout << "\nArchivo erroneo";
    cin.get();
    return 0;
    }

    cout << "\nEscribe una extension: ";
    cin.getline(ext, MAX_PATH);

    cout << "\nSeparaciones(+2): ";
    cin >> Num;

    if(Num < 2)
    {
    cout << "\nError,no se puede separar el archivo en "<<Num<<"parte/s";
    cin.get();
    return 0;
    }




    ifstream IFile(FileName, ios::binary);
    IFile.seekg(0, ios::end);
    tam = IFile.tellg();
    sizeyadividido = tam / Num;
    IFile.seekg(0, ios::beg);

    for(int i = 0; i< Num; i++)
    IFile.read(bytes[i], sizeyadividido);
    IFile.close();
    for(int i = 0; i < Num; i++)
    {
    sprintf(archivo2, "%d_%s.%s", i, FileName, ext);
    ofstream OFile(archivo2, ios::binary);
    OFile.write(bytes[i], sizeyadividido);
    OFile.close();
    }
    cout << "\n"<< FileName << " se dividion en  " << Num << " archivos";
    cin.get();
    return EXIT_SUCCESS;
}

Primero declaramos todas las variables, librerias y demás.
Ponemos el nombre y extensión de un archivo que este EN EL MISMO LUGAR que nuestro ejecutable.

Entonces tenemos la función GetFileAtributes que nos dice si existe o no y si tiene los atributos suficientes para poder dividirlo.

Citar
Código: You are not allowed to view links. Register or Login
¿Por qué 0xFFFFFFFF?

Porque si la función falla el valor de retorno es 0xFFFFFFFF o INVALID_FILE_ATTRIBUTES cosa que nos permite saber lo anteriormente comentado.

Luego se le implementa la extension y el numero de partes,(logicamente tiene que ser mayor de dos)

Y luego ya empieza el codigo verdadero comienza a leer los bytes del archivo y divide su tamaño por las partes que hemos pedido y con eso le damos el valor a sizeyadividido que en realidad serian los bytes por parte.

Llega el primer for con el que se lee todo el code y en el segundo se escribe todo(extension,nombre, contenido, bytes) hasta for(int i = 0; i < Num; i++) sencillo,¿no?



Tags:
Tags:

 


SMF 2.0.19 | SMF © 2016, Simple Machines
Paginas Afiliadas
Twitter - FaceBook - Daraxblog
Designed by Smf Personal