cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005
-
18 févr. 2004 à 20:17
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005
-
22 févr. 2004 à 01:29
Bon, soyons concis et précis!
Je veux transférer des fichiers sur mon baladeur mp3, c'est comme une clé usb.
Pour copier : j'ai utilisé SHFileOperation, ca marchait mais je ne peux pas gérer la fenêtre de copie et la progress bar, tout est automatique... D'autre part, la fonction n'aime pas qu'un PC soit connecté à un intranet et bug pour effacer car elle veut absolument balancer à la corbeille, qui n'existe pas sur la clé usb bien entendue. Bon en captant l'exception ça efface, sauf si Intranet... là elle n'efface que dalle. (c un pote qui l'a remarqué).
Y a CopyFile, mais pas de gestion de progress bar... CopyFileEx n'est pas compatible Win98 et je veux que mon prog le soit.
Bon, finalement c'est assez long! :o)
Conclusion je me rabat sur :
fopen(fichier source)
fopen(fichier dest)
while(!foef(source))
{
fread(source)
fwrite(dest)
/****** et la je gère mes progress bar ******/
}
fclose(dest)
fclose(source)
Bon, ca marche super de disque dur à disque dur, mais le gros hic, c'est que la boucle while se fait à toute vitesse, mais que l'écriture ne se termine que lors du fclose(dest)... car le fwrite n'est pas bloquant! Et le temps de transfert sur port USB est bien supérieur à celui de l'execution de la boucle while...
Donc gros hic : les progress bar se remplissent à toute pompe... et le prog bloque gentiment sur le fclose(dest) pour passer au fichier suivant...
Quelqu'un peut me dire comment capter la quantité réellement écrite.
PS : j'ai essayé de capter la taille du fichier écrit, mais elle est à 0 jusqu'à la fin du fclose(dest).
PS 2 : j'ai pensé capter l'espace libre sur le lecteur, mais c'est un peu la chasse au pigeon avec un lance roquette... et je ne suis meme pas sur que ca marche... comme la taille ne semble prendre effet qu'à partir du fclose(dest).
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 18 févr. 2004 à 22:24
euh, meme le coup de l'espace sur le lecteur ne marche pas, meme syndrome... j'ai pensé au fflush, sans effet...
je suis vraiment à cours là... svp :'(
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 18 févr. 2004 à 23:53
Merci de m'avoir répondu...
Ouais, je peux essayer, mais transférer 200 Mo octet par octet... Dis moi, y a aurait il moyen de synchroniser les lecture/écriture. Je veux dire : "ne lis pas dans le buffer tant qu'il n'a pas été écrit dans le fichier"... je vais essayer!
Merci encore.
Note que c'est con... ca marche mais c'est juste pour une histoire de progress bar :(
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 19 févr. 2004 à 00:38
Je l'ai !!!!!!! Ca fait 6 heures que je cherchais, j'ai un mal de tête affreux et plus de forfait (c pour ca que je n'ai pas pu chercher pendant des heures sur le net)! J'ai trouvé (sur MSDN... ) la fonction _commit : "Flushes a file directly to disk"
-> ca donne çà :
int inHandle = _open(fileSourcePath, _O_RDONLY | _O_BINARY);
int outHandle = _open(fileDestPath, _O_WRONLY | _O_CREAT | _O_TRUNC | _O_BINARY);
cs_goondy
Messages postés95Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention 7 janvier 2005 22 févr. 2004 à 01:29
Au cas ou... si ca peut en intéresser certains :
On peut forcer l'écriture sur le DD, pour cela, il faut rajouter "c" lors du fopen ... genre "fichier = fopen(nomdufichier, "wc");"
Et si on fflush(fichier), l'écriture sera forcée.
PS : apparement se problème ne se rencontre que sur win98...