Copie de fichier avec barre de progression

Signaler
Messages postés
67
Date d'inscription
vendredi 28 décembre 2001
Statut
Membre
Dernière intervention
23 juin 2015
-
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
-
Salut,
Comment peut-on copier un fichier avec une barre de progression ?

8 réponses

Messages postés
129
Date d'inscription
dimanche 9 décembre 2001
Statut
Membre
Dernière intervention
12 janvier 2009

Salut !
Pour copier un fichier, tu as, en gros, 2 solutions ! soit tu utilise une fonction déjà existante (ex :les API windows) soit tu le fé toi même !
Si tu utilise une fonction existante, à moins qu'il y ai prévu un appel a une fonction Callback, tu pourra pas faire de barre de progression !
Par contre, si tu fé ton propre système de copie (et c pas bien compliqué), tu pourra y integrer tout ce que tu ve !
Pour copier un fichier, il fo ouvrir le fichier source, ouvrir le fichier destination, puis lire des blocs dans le source, et les ecrire dans le destination, et ce, jusqu'a la fin du fichier !
En gros, tu va utiliser des bloc de 1Ko (par exemple), ce qui fé que tu aura une boucle While, et a chaque passage dans la boucle, tu peu faire afficher la barre de progression !
Et voilà !

A+
NICO !
Messages postés
67
Date d'inscription
vendredi 28 décembre 2001
Statut
Membre
Dernière intervention
23 juin 2015

Salut,
Mais avec les API, il y a bien la fonction CopyFileEx, mais elle ne marche qu'avec Windows NT ! (J'ai Windows 98) On peut faire autrement ?

Sinon pour ton système de copie, c'est intéressant, mais c'est bien :
FILE *fp,*fp2;
char temp[255]="Vide";
for(int i=0;strcmp(temp,"");i++)
{
fscanf(fp,"%s",&temp);
fprintf(fp2,"%s",temp);
}
Messages postés
126
Date d'inscription
mercredi 18 juillet 2001
Statut
Membre
Dernière intervention
27 octobre 2004

Pour Windows 98 ultilise la fonction CopyFile (inclure winbase.h) mais il n'y a pas de barre de progression...

BOOL CopyFile(

LPCTSTR lpExistingFileName, // adresse du nom du fichier source
LPCTSTR lpNewFileName, // adresse du nom du fichier cible
BOOL bFailIfExists // flag renvoyé si le fichier éxiste déjà
);
Messages postés
67
Date d'inscription
vendredi 28 décembre 2001
Statut
Membre
Dernière intervention
23 juin 2015

Heu... Oui je connais...
Et pour mon code, il est bon ?
Messages postés
129
Date d'inscription
dimanche 9 décembre 2001
Statut
Membre
Dernière intervention
12 janvier 2009

A priori, ton code est pas génial !
Si tu ve copier des fichier, ce ne sont pas forcéments des fichiers de texte, et dans ce cas, tu est obligé de lire des octets en mode bianire, et pas des chaines de caractère !
Déjà il fo ouvrir les fichier en binaire (voir la doc de fopen )
ensuite, utilise fread, et fwrite pour lite et écrire des bloc de donnée (en nombre d'octets) ! tu pe lire 1 octet, puis ecrire 1 octet !

Ensuite, ta boucle FOR est inutilisable dans ton cas ! il te fo utiliser un while, et pour tester si tu est a la fin du fichier, utilise feof !

Voilà, avec tout ca, tu as toutes les fonctions pour créé ta propre fonction copier !

a+
NICO
Messages postés
67
Date d'inscription
vendredi 28 décembre 2001
Statut
Membre
Dernière intervention
23 juin 2015

Ok merci !
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
Essaie ça mon vieux :-)) :

#include

using namespace std;

FILE *fp, *fq;
int carac;

if ((fp = fopen(fichier_source, "rb")) != NULL)
if ((fq = fopen(fichier_destination, "wb")) != NULL) {

while ((carac = fgetc(fp)) != EOF)
fputc(carac, fq);

fclose(fp);
fclose(fq);
}

Et vala, si t'a d'autres questions, n'hésite pas... :-))

Genda67, à votre service !
Messages postés
180
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
3
Bonjour à tous,

J'essaye moi aussi de faire une barre de progression en langage C
Mais j'ai un petit soucis: comment faire pour connaitre la taille
d'un répertoire (parce que je suppose que la copie ou la suppression de
fichiers
se fait grace à la taille et non avec le nombre de fichiers...).

J'ai essayé bêtement avec une fonction fopen puis en binaire comme
on le dit plus haut: (source=fopen("c:\\nomdurepertoire","rb+");) mais
ca ne marche pas.


J'ai ensuite essayé avec le nombre de fichiers mais même problème:
comment faire, cette fois,pour trouver le nombre de fichiers du
répertoire... Pour ne pas dire d'avoir perdu mon temps j'ai fait un
programme dans lequel je doit rentrer le nombre de fichier à copier au
clavier (le programme marche mais la barre en elle-même a un problème je n'arrive pas à le résoudre):


#include <stdio.h>

#include <stdlib.h>

#include <conio.h>



int main()

{

int x=954783; //nombre de fichiers à copier

int i=0; //indique quel fichier est copié

int j; //pourcentage de fichiers copiés





printf("Entrez le nombre de fichier a copier: ");

scanf("%d",&x);


while(i<=x)

{
j=(i*100)/x;

if((j%5)==0)

{

gotoxy(5,15);

printf("%d%",j);

}



i++;

}



printf("\n\n");

system("pause");

}



Pour faire court ma principale question est: comment on fait pour
se déplacer dans un répertoire, en trouver le nombre de fichiers etc.
en langage C?



Voila j'espère que je me suis bien expliqué et si qqun peut m'aider je le remercie d'avance. A plus tard.