|
begin process at 2008 07 05 07:14:10
Derniers logiciels
|
Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
SPLITTER DE FICHIERS
Information sur la source
Description
Salut a tous Je vous propose comme premiere source un code tres original, le decoupeur (et recolleur en option ;) de fichiers Je sais que c'est le genre de source pas tres original mais ça me tentais de faire un truc comme ça Je compte sur vous pr me donner votre avis toute remarque ou suggestion est la bienvenue (je dirai que ce code est la verszion 0.8 ;) ps: on ne pe creer qu'un rep ! c'est a dire on peut creer "c:\test" si test existe pas mais pas c:\test\test2 si ni test ni test2 existe (je pense corriger ça)
Source
- // decoupe et recolle n'importe quel type de fichier //
- // par fjxokt //
-
-
- #include <fstream>
- #include <stdio.h>
- #include <fcntl.h>
- #include <string>
- #include <cstring>
- #include <iostream>
- #include <dirent.h>
-
-
-
- using namespace std;
-
- int main()
- {
-
- //definition des variables
- char filename[100];
- char filefinal[100];
- int choix;
- int tailleff, nbrparts;
-
- cout << "Voulez-vous decouper (1) ou recoller (2) un fichier ?\t";
- cin >> choix;
-
- if (choix == 1) {
-
- cout << "\nRentrez le fichier a decouper\n";
- cin.ignore(1,'\n'); //en cas d'espace ds les dossiers
- cin.getline(filename,100);
- cout << "Rentrez la taille des futurs fichiers en ko:\n";
- cin >> tailleff;
-
- int cle_de_fichier; //recherche de la taille du fichier
- int taille_fichier;
- if ((cle_de_fichier = open(filename, O_RDONLY)) == -1)
- {
- printf("\aErreur a l\'ouverture du fichier %s\n", filename);
- return -1;
- }
- else
- {
- taille_fichier = filelength(cle_de_fichier);
- close(cle_de_fichier);
- }
-
- tailleff*=1024; //transformation des octets en ko ;)
-
- nbrparts = round(taille_fichier/tailleff) + 1; //on arrondi au nombre de coupes + 1
- if ((nbrparts - 1) * tailleff == taille_fichier) { nbrparts = nbrparts - 1; } //ds le cas d'une division avec resultat sans virgule
-
- ifstream fin(filename, ios::binary | ios::in); //on ouvre le fichier source en lecture binaire
- cout << "\nDecoupage en cours...\n";
-
- int tailletmp;
- for(int numero = 1; numero <= nbrparts; numero++) //boucle pr le nombre de fichiers a creer
- {
- tailletmp = 0;
- sprintf(filefinal,"%s.%d", filename,numero); //ajout des extension .1 etc au fichier
- cout << "creation de " << filefinal <<" ...\n";
-
- ofstream fout(filefinal, ios::binary | ios::app); //ouverture des fichiers decoupes en binaire
- char ch;
- while (fin.get(ch)) {
- if (numero == 1) {
-
- if (tailletmp < tailleff) {
- fout << ch; //et ecriture (je sais caractere par caractere c pas le mieux)
- tailletmp++;
- }
- else {
- sprintf(filefinal,"%s.%d", filename,(numero + 1));
- ofstream fout(filefinal, ios::binary | ios::app );
- fout << ch;
- fout.close();
-
- break; }
- }
- else {
- if (tailletmp < (tailleff - 1)) {
- fout << ch;
- tailletmp++;
- }
- else {
- sprintf(filefinal,"%s.%d", filename,(numero + 1));
- ofstream fout(filefinal, ios::binary | ios::app );
- fout << ch;
- fout.close();
-
- break; }
- }
- }
- fout.close(); //on ferme le fichier cree
- }
-
- fin.close(); //on ferme le fichier source
- cout << "\aDecoupage termine !\n\n";
- }
-
- else if (choix == 2) {
-
- int nbrsup;
- char fdec[100], fentier[100], chemin[100];
- unsigned short int supr;
-
- cout << "\nRentrez le chemin vers la premiere partie du fichier decoupe (sans le .01)\n";
- cin.ignore(1,'\n');
- cin.getline(fentier,100);
-
- cout << "Ou voulez vous stocker le fichier final (sans le '\\' de fin de dossier) ?\n"; //pr des raison de facilité lol
- cin.ignore(0,'\n');
- cin.getline(chemin,100);
-
- if (opendir(chemin) == NULL) { cout << "Le dossier n'existe pas, creation de " << chemin << "\n"; mkdir(chemin); } //ne peut creer qu'un seul dossier attention !
-
- string chemin_ffinal = fentier;
- string chemin_cplt = chemin;
-
- size_t ext_pos2 = chemin_ffinal.find_last_of( '\\' ); //on recherche le nom du dossier ds la chaine
- if ( ext_pos2 != string::npos )
- {
-
- string ext2( chemin_ffinal, ext_pos2 );
-
- cout << "\nRecollage en cours...\n";
-
- chemin_cplt += ext2; //chemin + nom du fichier
-
- ofstream fout(chemin_cplt.c_str(), ios::binary | ios::out); //creation et ouverture du fichier complet
-
- for (int num = 1; num >= 1; num++) { //boucle pr determiner le nombre de fichiers decoupes
- sprintf(fdec,"%s.%d", fentier ,num);
- ifstream fin(fdec, ios::binary | ios::in); //on ouvre les fichiers decoupes pr le recopiage
- if (!fin) { nbrsup = num; break; } //si le fichier num n'existe pas alors c'est qu'on a lus ts les fichiers decoupes
- else {
- cout << "boucle " << num << " lancee...\n";
- char ch;
- while (fin.get(ch)) {
- fout << ch; //ecriture ds le fichier final
- }
- fin.close(); //on ferme
- }
- }
- fout.close();//on ferme
-
- cout << "\aRecollage termine !\n\n";
-
- cout << "Voulez effacer (1) ou conserver (2) les fichiers decoupes ?\t";
- cin >> supr;
-
- if (supr == 1) {
- for (int s = 1; s <= nbrsup; s++) {
- sprintf(fdec,"%s.%d",fentier,s);
- remove(fdec); //suppresion (si desire) des fichiers decoupes
- }
- cout << "Nettoyage effectue !\n\n";
- }
- else { cout << "\n"; }
- }
- }
-
-
- system("PAUSE");
- return 0;
- }
// decoupe et recolle n'importe quel type de fichier //
// par fjxokt //
#include <fstream>
#include <stdio.h>
#include <fcntl.h>
#include <string>
#include <cstring>
#include <iostream>
#include <dirent.h>
using namespace std;
int main()
{
//definition des variables
char filename[100];
char filefinal[100];
int choix;
int tailleff, nbrparts;
cout << "Voulez-vous decouper (1) ou recoller (2) un fichier ?\t";
cin >> choix;
if (choix == 1) {
cout << "\nRentrez le fichier a decouper\n";
cin.ignore(1,'\n'); //en cas d'espace ds les dossiers
cin.getline(filename,100);
cout << "Rentrez la taille des futurs fichiers en ko:\n";
cin >> tailleff;
int cle_de_fichier; //recherche de la taille du fichier
int taille_fichier;
if ((cle_de_fichier = open(filename, O_RDONLY)) == -1)
{
printf("\aErreur a l\'ouverture du fichier %s\n", filename);
return -1;
}
else
{
taille_fichier = filelength(cle_de_fichier);
close(cle_de_fichier);
}
tailleff*=1024; //transformation des octets en ko ;)
nbrparts = round(taille_fichier/tailleff) + 1; //on arrondi au nombre de coupes + 1
if ((nbrparts - 1) * tailleff == taille_fichier) { nbrparts = nbrparts - 1; } //ds le cas d'une division avec resultat sans virgule
ifstream fin(filename, ios::binary | ios::in); //on ouvre le fichier source en lecture binaire
cout << "\nDecoupage en cours...\n";
int tailletmp;
for(int numero = 1; numero <= nbrparts; numero++) //boucle pr le nombre de fichiers a creer
{
tailletmp = 0;
sprintf(filefinal,"%s.%d", filename,numero); //ajout des extension .1 etc au fichier
cout << "creation de " << filefinal <<" ...\n";
ofstream fout(filefinal, ios::binary | ios::app); //ouverture des fichiers decoupes en binaire
char ch;
while (fin.get(ch)) {
if (numero == 1) {
if (tailletmp < tailleff) {
fout << ch; //et ecriture (je sais caractere par caractere c pas le mieux)
tailletmp++;
}
else {
sprintf(filefinal,"%s.%d", filename,(numero + 1));
ofstream fout(filefinal, ios::binary | ios::app );
fout << ch;
fout.close();
break; }
}
else {
if (tailletmp < (tailleff - 1)) {
fout << ch;
tailletmp++;
}
else {
sprintf(filefinal,"%s.%d", filename,(numero + 1));
ofstream fout(filefinal, ios::binary | ios::app );
fout << ch;
fout.close();
break; }
}
}
fout.close(); //on ferme le fichier cree
}
fin.close(); //on ferme le fichier source
cout << "\aDecoupage termine !\n\n";
}
else if (choix == 2) {
int nbrsup;
char fdec[100], fentier[100], chemin[100];
unsigned short int supr;
cout << "\nRentrez le chemin vers la premiere partie du fichier decoupe (sans le .01)\n";
cin.ignore(1,'\n');
cin.getline(fentier,100);
cout << "Ou voulez vous stocker le fichier final (sans le '\\' de fin de dossier) ?\n"; //pr des raison de facilité lol
cin.ignore(0,'\n');
cin.getline(chemin,100);
if (opendir(chemin) == NULL) { cout << "Le dossier n'existe pas, creation de " << chemin << "\n"; mkdir(chemin); } //ne peut creer qu'un seul dossier attention !
string chemin_ffinal = fentier;
string chemin_cplt = chemin;
size_t ext_pos2 = chemin_ffinal.find_last_of( '\\' ); //on recherche le nom du dossier ds la chaine
if ( ext_pos2 != string::npos )
{
string ext2( chemin_ffinal, ext_pos2 );
cout << "\nRecollage en cours...\n";
chemin_cplt += ext2; //chemin + nom du fichier
ofstream fout(chemin_cplt.c_str(), ios::binary | ios::out); //creation et ouverture du fichier complet
for (int num = 1; num >= 1; num++) { //boucle pr determiner le nombre de fichiers decoupes
sprintf(fdec,"%s.%d", fentier ,num);
ifstream fin(fdec, ios::binary | ios::in); //on ouvre les fichiers decoupes pr le recopiage
if (!fin) { nbrsup = num; break; } //si le fichier num n'existe pas alors c'est qu'on a lus ts les fichiers decoupes
else {
cout << "boucle " << num << " lancee...\n";
char ch;
while (fin.get(ch)) {
fout << ch; //ecriture ds le fichier final
}
fin.close(); //on ferme
}
}
fout.close();//on ferme
cout << "\aRecollage termine !\n\n";
cout << "Voulez effacer (1) ou conserver (2) les fichiers decoupes ?\t";
cin >> supr;
if (supr == 1) {
for (int s = 1; s <= nbrsup; s++) {
sprintf(fdec,"%s.%d",fentier,s);
remove(fdec); //suppresion (si desire) des fichiers decoupes
}
cout << "Nettoyage effectue !\n\n";
}
else { cout << "\n"; }
}
}
system("PAUSE");
return 0;
}
Conclusion
ce n'est qu'un debut je compte l'ameliorer et pe etre faire une version graphique
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 28 janvier 2005 20:27:25 :
- 28 janvier 2005 23:20:54 :
- 31 janvier 2005 18:11:41 :
- transformation des octets en ko desormais "exacte"
(sur un commentaire de ymca2003 )
Sources de la même categorie
Commentaires
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | | | |
|
|
|