Copier un fichier d'un endroit a un autre ???

Résolu
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009 - 9 nov. 2006 à 20:09
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 16 nov. 2006 à 20:17
(MFC ou pas, je prend tout)

pour l'instant, je fais cette operation avec CopyFile(...)
mais cette methode bloque l'application !!!!!

je ne veux pas lire le fichier pour "coller" le contenu dans un autre  ----> trop lent

merci.
gege

15 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 nov. 2006 à 22:42
Voici un exemple de ce que tu peux faire:
// Définition en global de la structure contenant les chemins:
struct Chemins{
    char source[MAX_PATH];
    char destination[MAX_PATH];
};

// Fonction du thread:
DWORD ThreadFunction( LPVOID  params)
{
    Chemins* paths=(Chemins*)params;
    CopyFile(paths->source, paths->destination, 0);
    return 0;
}

Dans la fonction appelant le thread tu fais par exemple juste après le clic d'un bouton:
Chemins chem; // à déclarer en static
lstrcpy (chem.source, "C:\\monfichier.txt");
lstrcpy (chem.destination, "D:\\copiedemonfichier.txt");
CreateThread(0,0,ThreadFunction,(LPVOID)&Chemins,0 ,0);
// suite de ton  code....
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 nov. 2006 à 21:00
dans un thread CopyFile()

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 nov. 2006 à 21:01
Salut,
Tu peux utiliser CopyFile() dans un thread. Ce dernier assurera la copie du fichier sans bloquer l'application. Tous les paramètres seront passés au thread dans une structure.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 nov. 2006 à 21:07
J'ai eu 40 secondes de retard  :)
0

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

Posez votre question
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
9 nov. 2006 à 21:09
ok, je vois bien la solution mais le hic c'est que je vais devoir passer un bon moment pour comprendre le multi-thread !!!!
on peut faire simple en qq lignes?

(mfc en plus, je sais que BruNews n'aime pas ca)

gege
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
9 nov. 2006 à 21:13
precision, j'ai fais il y a qq temps un programme avec mise a jour auto (verification sur un serveur http d'une nouvelle version)
et pour faire les telechargement , j'avais fais un 2ieme prog (celui qui telecharge) lancer par le premier.

--> en fait , je peux faire ceci dans le meme prog (multi-thread) ???

gege
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 nov. 2006 à 21:24
Bien sur, c'est ça l'utilité du multi-threading. Tout se fait dans le
même processus de ton application. La fonction du thread sera exécutée
sans bloquer le programme. Le multi-threading est indispensable dans
beaucoup de cas. Et ce n'est pas compliqué car une seule fonction
de quelques lignes suffira pour ton thread.
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
9 nov. 2006 à 21:28
c'est possible d'avoir un exemple simple.
je vais devoir passer bcp de temps pour reecrire mes progs.
j'ai vraiment un pb pour trouver les infos .

gege
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 nov. 2006 à 15:39
Ne pas oublier CloseHandle.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 nov. 2006 à 19:08
Je me trompe?

C++ (@++)<!--
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
10 nov. 2006 à 21:49
SAKingdom >> CopyFile() se charge de tout. Il suffit de lui soumettre les chemins source et destination en plus d'un dernier paramètre autorisant ou non l'écrasement du fichier destination s'il existe déjà. Aucun besoin de CloseHandle().
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 nov. 2006 à 21:51
Non, pour le thread.
C++ (@++)<!--
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
10 nov. 2006 à 22:54
Ah ok. Je pensais au handle du fichier à copier.
Pour le thread je voulais donner un exemple très simple. Effectivement, si on n'appelle pas CloseHandle() l'objet thread ne sera pas libéré du système. C'est plutôt un exemple à but pédagogique. Il devra ensuite chercher à comprendre toutes les subtilités que l'utilisation des threads entraine.
Merci pour la remarque.
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
16 nov. 2006 à 19:14
petite precision
si je veux copier plusieurs fichiers, je fais une boucle a l'interieur de "ThreadFunction"
ou j'appelle x fois "ThreadFunction"   ????

la 2ieme solution est a priori pas la bonne car comme ca je créer autant de thead que de fichier à copier, non ?

gege
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 nov. 2006 à 20:17
ben oui, un thread suffit pour y faire ce que tu veux.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous