begin process at 2012 05 29 18:13:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Fichier / Disque

 > 

Pb débit USB / affichage progress bar


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb débit USB / affichage progress bar

mercredi 18 février 2004 à 20:17:53 | Pb débit USB / affichage progress bar

goondy

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).

En gros, HELP!!!! PLEASE!!!!!
mercredi 18 février 2004 à 22:24:00 | Re : Pb débit USB / affichage progress bar

goondy

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 :'(
mercredi 18 février 2004 à 22:34:02 | Re : Pb débit USB / affichage progress bar

Arnotic

Administrateur CodeS-SourceS
Bonjour,

Si tu lisais une fois ton fichier et que tu utilises fputc() pour écrire sur ta clé ?

Perso j'ai pas encore fait de test mais je pense que se serai bon.

Si ca ne marche pas je ferai des tests pour te donner une solution !

@+
Arnotic
Admin CS, MVP Visual C++
mercredi 18 février 2004 à 23:53:15 | Re : Pb débit USB / affichage progress bar

goondy

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 :(
jeudi 19 février 2004 à 00:38:11 | Re : Pb débit USB / affichage progress bar

goondy

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);

while(!_eof(inHandle))
{
// lecture d'un paquet
taillePaquetLu = _read(inHandle, opBuffer, taillePaquet);

// écriture de celui-ci
_write(outHandle, opBuffer, taillePaquetLu);

_commit(outHandle); // <------- LUI

// progress bar des fichiers
currentProgressFile += progressFileStep;
m_ctrlProgressFile.SetPos((int) currentProgressFile);

// progress bar totale
currentProgressTotal += progressTotalStep;
m_ctrlProgressTotal.SetPos((int) currentProgressTotal);
}

_close(inHandle);
_close(outHandle);

Et ca marche nickel !!!!!!!!!!!!! j'ai pas trouvé de fonction moins 'bas niveau' , genre 'fcommit' ou un truc dans le genre, mais je m'en fous! :o)
jeudi 19 février 2004 à 07:51:52 | Re : Pb débit USB / affichage progress bar

Arnotic

Administrateur CodeS-SourceS
Bonjour,

Content pour toi ! :-)

@+
Arnotic
Admin CS, MVP Visual C++
dimanche 22 février 2004 à 01:29:12 | Re : Pb débit USB / affichage progress bar

goondy

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...


Cette discussion est classée dans : progress, bar, usb, dest, fclose


Répondre à ce message

Sujets en rapport avec ce message

status bar et progress bar (win32) [ par Elendal ] J'ai créé une status Bar en deux parties.Dans la première partie, j'affiche du texte. Là pas de problème.Dans la deuxième par contre, je voudrais mett progress bar [ par yangan ] Comment marche une progress bar en c++ sous visual(avec mfc)? URGENT-vc++ [ par yangan ] G deux petits problèmes sou vc++ et ça devient très urgent!1-comment faire un progress bar inversé cad comment faire pour qu'il avance de droite à gau Progress Bar [ par thebigbang ] Bonjour,Comment faire pour insérer une progress bar dans un projet VC++ ?J'ai essayé d'en déposer une sur la fenetre mais lorsque je compile, rien ne pb de progress bar en visual c++ [ par glipper ] Voila je debute en programmation visual c++ et je n'arrive pas à faire marcher une progress bar. J'arrive à la faire apparaitre dans ma boite de dialo Progress Bar [ par LordBob ] Bonjour a tous,moi je voudrai juste savoir comment on fait pour remplir une progress bar... merci d'avance... facile: progress bar [ par bethany ] Bonjour, j'ai une question toute bete!Je voudrais savoir comment on fait en MFC pour faire avancer la progress bar ( suivant un certain temps !!! ).Je Progress bar dès initialisation dialogbox [ par goutbouyo ] Salut,J'ai crée une progrssbar dans ue boite de dialog.La barre commence à progresser quand j'appuie sur le bouton GO.Mais je voudrais qu'elle démarre Hook clavier pendant progressbar [ par goutbouyo ] Salut,Je voudrais mettre un hook général sur le clavier pendant une progress bar.J'ai essayé en mettant un WinExec sur un programme trouvé sur ce site Progress bar, dialog refuse de s'afficher [ par babylone2019 ] Bonjour, Je debute avec visual C++ 6.J'ai creer une ressource de type dialog qui ce compose de quelque label et d'une progress bar.J'inclus la librair


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,299 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales