Copie de fichier avec barre de progression

Jmgr Messages postés 67 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 23 juin 2015 - 27 janv. 2002 à 00:16
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 - 29 juil. 2005 à 14:09
Salut,
Comment peut-on copier un fichier avec une barre de progression ?

8 réponses

MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
27 janv. 2002 à 10:57
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 !
0
Jmgr Messages postés 67 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 23 juin 2015
27 janv. 2002 à 13:23
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);
}
0
ADPro22 Messages postés 126 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 27 octobre 2004
27 janv. 2002 à 14:10
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à
);
0
Jmgr Messages postés 67 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 23 juin 2015
27 janv. 2002 à 17:28
Heu... Oui je connais...
Et pour mon code, il est bon ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
27 janv. 2002 à 20:19
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
0
Jmgr Messages postés 67 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 23 juin 2015
28 janv. 2002 à 08:14
Ok merci !
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
13 oct. 2004 à 23:43
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 !
0
moi411 Messages postés 179 Date d'inscription samedi 22 novembre 2003 Statut Membre Dernière intervention 25 juin 2017 3
29 juil. 2005 à 14:09
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.
0
Rejoignez-nous