C/C++ Fread (windows)
Bonjour,
alors, je suis pas un initié mais j'essaye de faire un petit prog simple, un genre de xcopy, j'en suis encore loin, pour le moment j'ai juste fé qqchose de tres basique:
(tout les commentaires constructifs sont les bienvenu ;)
j'utilise visual studio 6
je cherche un moyen de reduire le temps entre un fread et le ferr...
je m'explique, je lis à partir du cdrom, je cherche juste a recuperé des fichiers dont certain bytes sont illisible, et de les remplace par des 0 dans la copie.
Seulement, entre fread et ferr, il se passe environ 20 à 25sec... donc si un fichier contient 200 octets illisibles (et parfois +) vous imaginez le temps que çà prend pour copier 1 fichier. (et j'ai bokou de fichier dans ce cas)
je voudrais des reponses constructives...
s'il y a besoin d'info demandez moi :)
@bientot
alors, je suis pas un initié mais j'essaye de faire un petit prog simple, un genre de xcopy, j'en suis encore loin, pour le moment j'ai juste fé qqchose de tres basique:
int main(void) { char *src,*dest; //chaine pour set les chemins de fichier.. FILE *s,*d;//pointeurs sur les fichier pour les fonction f... src = "H:\\source.mp3";//fichier source dest = "F:\\Dest.mp3";//fichier de destination s = fopen(src,"rb");//ouverture des 2 fichiers d = fopen(dest,"wb"); if (s == NULL || d == NULL) { // verif d'erreur d'ouverture cout << "Erreur d'ouverture de fichier..."; return 0; } else { char *r; unsigned int t,i = 0; r = (char*) malloc(1); while (1) { //boucle pour lire le fichier byte par byte et le copier i++; t = GetTickCount(); fread(r,1,1,s); if (ferror(s)) { *r = '0'; printf("ReadError... Pos: %u Tps: %u ms\n",i,GetTickCount() - t); } fwrite(r,1,1,d); if (feof(s)) break; } fclose(s); fclose(d); free(r); return 0; } }
(tout les commentaires constructifs sont les bienvenu ;)
j'utilise visual studio 6
je cherche un moyen de reduire le temps entre un fread et le ferr...
je m'explique, je lis à partir du cdrom, je cherche juste a recuperé des fichiers dont certain bytes sont illisible, et de les remplace par des 0 dans la copie.
Seulement, entre fread et ferr, il se passe environ 20 à 25sec... donc si un fichier contient 200 octets illisibles (et parfois +) vous imaginez le temps que çà prend pour copier 1 fichier. (et j'ai bokou de fichier dans ce cas)
je voudrais des reponses constructives...
s'il y a besoin d'info demandez moi :)
@bientot
A voir également:
- C/C++ Fread (windows)
- Clé windows 8 - Guide
- Montage video windows - Guide
- Windows ne démarre pas - Guide
- Windows movie maker - Télécharger - Montage & Édition
- Restauration systeme windows 10 - Guide
6 réponses
Vu que tu as deco, j'ai penser a faire une recherche dans les bibliotheques pour voir si ya pas une histoire de timeout.
Sinon il ce peu aussi que ce soit le fait que le lecteur insite avant de dir que le secteur est ilisible donc la tu peux rien y faire (le lecteur fait du bruit a ce moment ^^)
Chao
Sinon il ce peu aussi que ce soit le fait que le lecteur insite avant de dir que le secteur est ilisible donc la tu peux rien y faire (le lecteur fait du bruit a ce moment ^^)
Chao
Euh c'est peut être moi qui est fumé mais tu ne peux pas utiliser directement les flux sur les fichiers (cf <fstream.h>), avec l'opérateur "<<" ?
bonjour !
Il y a quelques petites choses qui à mon avis posent problème
a éviter absolument avec les chaines de caractères
cela de marche que lors de la déclaration de la chaine
et ça limite la taille de la chaine à ce qui a été mis dedans au départ
==>pas réutilisable
utiliser plutôt
on peut aussi par exemple déclarer src comme suit :
ce qui lui alloue un espace capable de contenir 99 caractères
pas besoin de faire free(src) à la fin.
on utilise généralement ces fonctions avec des structures
dont on connait la taille.
pour les caractères, il est plus simple d'utiliser
en lecture :
en écriture :
où index est un entier qui incrémente dans une boucle tant que
cordialement, et bon courage
Il y a quelques petites choses qui à mon avis posent problème
src = "H:\\source.mp3";
a éviter absolument avec les chaines de caractères
cela de marche que lors de la déclaration de la chaine
et ça limite la taille de la chaine à ce qui a été mis dedans au départ
==>pas réutilisable
utiliser plutôt
strcpy(destination, source);
on peut aussi par exemple déclarer src comme suit :
char src[100];
ce qui lui alloue un espace capable de contenir 99 caractères
pas besoin de faire free(src) à la fin.
fread(r,1,1,s); fwrite(r,1,1,d);
on utilise généralement ces fonctions avec des structures
dont on connait la taille.
pour les caractères, il est plus simple d'utiliser
en lecture :
r[index]=fgetc(s);
en écriture :
fputc(r[index], d);
où index est un entier qui incrémente dans une boucle tant que
!feof(s);
cordialement, et bon courage
oui possible mamiemando, mais j'y connais pas grand chose en prog... donc je fait comme je peut...
tu pourrais me donner un exemple d'utilisation de "<<" en reprenant mon principe, ou pas, c toi ki vois...
je sais pas si çà changerais le temps pour le erreur...
tu pourrais me donner un exemple d'utilisation de "<<" en reprenant mon principe, ou pas, c toi ki vois...
je sais pas si çà changerais le temps pour le erreur...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
à merci blurk pour les remarques j'essayerais de voir si je peux faire qqchose de plus propre avec çà...
mais, il y a toujours un mais :o) le pb viens surtout de la durée entre une tentative de lecture et l'erreur qui en resulte...
je voudrais pouvoir definir ce parametre... :/
mais, il y a toujours un mais :o) le pb viens surtout de la durée entre une tentative de lecture et l'erreur qui en resulte...
je voudrais pouvoir definir ce parametre... :/
Voilà pour les bases.
http://www.cplusplus.com/ref/iostream/ostream/operatorltlt.html
Je me demande si be tu peux pas faire directement dest<<source avec dest un ofstream et source un ifstream... A vérifier ;)
<< ajoute ce qu'il y a à droite dans ce qui est à gauche (dest<<source). Exemple d'utilisation : écriture (d'un fichier comme stdout par exemple appelé en c++ std::cout)
>> extrait ce qu'il y a gauche vers ce qui est à droite (source>>dest)
Exemple d'utilisation : lecture d'un fichier (par exemple stdin, appelé en c++ std::cin)
Bonne chance ;)
Rq : pour les sorties standards (stderr et stdout) et l'entrée standard, on n'utilise pas <fstream> mais <iostream>
Rq2: ne pas mettre le ".h" dans le #include pour les headers c++:
Ex : on ne met pas #include <iostream.h> mais #include <iostream>
http://www.cplusplus.com/ref/iostream/ostream/operatorltlt.html
Je me demande si be tu peux pas faire directement dest<<source avec dest un ofstream et source un ifstream... A vérifier ;)
<< ajoute ce qu'il y a à droite dans ce qui est à gauche (dest<<source). Exemple d'utilisation : écriture (d'un fichier comme stdout par exemple appelé en c++ std::cout)
>> extrait ce qu'il y a gauche vers ce qui est à droite (source>>dest)
Exemple d'utilisation : lecture d'un fichier (par exemple stdin, appelé en c++ std::cin)
Bonne chance ;)
Rq : pour les sorties standards (stderr et stdout) et l'entrée standard, on n'utilise pas <fstream> mais <iostream>
Rq2: ne pas mettre le ".h" dans le #include pour les headers c++:
Ex : on ne met pas #include <iostream.h> mais #include <iostream>