Vous n'êtes pas identifié.
voila je voudrais connaitre la taille d'un fichier dont je connais le chemin.
Avec une fonction de ce type on peut trouver la taille:
// renvoie la taille en octet du fichier // renvoie -1 si le fichier ne pas etre ouvert // le fichier est ouvert en mode binaire long fsize( char *dirname ) { long size; FILE *fp=fopen (dirname, "r"); // ouverture du fichier en mode binaire if(fp!=NULL) { fseek(fp, 0, SEEK_END); /* aller en fin */ size = ftell(fp); /* lire la taille */ fclose(fp); // on ferme le fichier } else size=-1; return size; }
Mais je voudrais savoir s'il n'y aurait un moyen plus simple. genre un astuce en C qui te donne directement la taille
Hors ligne
sinon mon exploreur fonctionne très bien sur mon PC ( c plus rapide pour tester ). Il est limité à deux réperoirtoire l'un dans l'autre. le tout dans un lecteur.
ex: L:imagesvacances
Si y a un troisième dossier je ne l'ouvrirai pas. fo penser à l'affichage des dossiers sur la calculatrice ensuite. ca ne sert a rien de une arborescence trop complex.
Moi je dis que www.developpez.com c'est génial ! surtout leur FAQ. très utile pour les débutants.
Hors ligne
lol ya aussi tou simplement une fonction
long filelength(int handle)
c'est beaucoup plus simple et elle renvoie aussi -1 si le fichier n'existe pas
Hors ligne
Oui mais le handle vient d'ou? Ce n'est pas le meme type de "manip" qu'avec fopen et fread (donc avec des ptr sur struct FILE): il faudrait ouvrir le fichier avec open pour avoir un handle comme ca alors?
Hors ligne
ah oui autant pour moi (la vache yen a du monde sur le forum a 8h30 :mrgreen: )
ben sinon je vois pas trop, a part qu'on peut avoir la taille avec findfirst:
struct ffblk found; if(!findfirst(dirname,&found,0)) { return found.ff_fsize; } else { return -1; }
ah mais si c pas mal finalement
Hors ligne
findfirst fait une recherche, ce qui prend de la place et du temps pour rien, alors que opendir et readdir lit simplement fichier par fichier, sans esquiver aucun élement... donc faut voir!
Hors ligne
si qqun trouve une meilleure methode generique qu'il le dise !
pour utiliser readdir neanmoins il faut que le fichier se trouve dans le repertoire courant et readdir scanne tous les fichiers/dossiers. la meilleure maniere de faire ca pour un explo a mon avis c'est de recuperer la liste des fichiers avec la taille dans un tableau
Hors ligne
la vitesse je pense pas que ca soit tres important pour un explo, de plus findfirst et findnext sont tres rapides, y'a pas de soucis de ce coté la
Hors ligne
je me souviens pas comme je fais ...
Je pense que j'ouvre chaque fichier et que je fais long filelength(int handle)
Hors ligne
et open est plus rapide que fopen car il utilise les routines dos internes au lieu de routines complexe bufferisées....
Hors ligne
la meilleure maniere de faire ca pour un explo a mon avis c'est de recuperer la liste des fichiers avec la taille dans un tableau
c'est comme que je procede. Quand on ouvre un lecteur, je scanne celui completement : les fichiers, les dossiers, et fichiers des dossiers. et je range dans un tableau.
L'explo fonctionne bien sur PC, mais bon maintenant fo ke je m'attaque à l'affichage sur la caltos. c'est pa plus plus amusant.
Hors ligne
T'as vraiment l'air de prendre ton pied en faisant te prog...
Hors ligne
franchement je kif programmer mon explo. mais bon pa bcp de temps en ce moment. en plus pour j'ai fé le plus dur. donc moins de motivation. et puis la copine qui prend de plus en plus ( ki a di de POID ke je le tue ! lol ) de temps !
Hors ligne
on m'avait dit sur le forum C de developpez.com que les fonctions open & co. étaient moins rapides que fopen (ils les ont appellées les fonx de bas nivo lol)
D'ailleurs g pu confirmer avec Encoder 1: de 30Ko/s ac read&write à 700Ko/s ac fgetc&fputc !!
Hors ligne
sous wincrotte oui mais sur un mode réel avec les interuptions c bien plus rapide
Hors ligne
l'avantage c'est que sous windows, ces fonctions fgetc beneficie de l'avantage du buffering, car une partie du fichier est chargée en memoire, alors que sur calto non
open est donc forcement + rapide sur graph100 car a la base ces deux fonctions utilisent les memes interruptions
Hors ligne
dans ce cas, je vois pas pourquoi dans l' aide de TC3 il font référence à des buffer pour les fonction fXXX !
Hors ligne
c'est des petit buffer donc dans le cas d'un fichier que tu charge qu'une fois, ou alors si tu lis a plein d'endroit differents c pas tres avantageux
Hors ligne
Vous vous cassez le c*l pour rien mdr
y'a pas de probleme de vitesse en utilisant fopen, sonic charge 15 ko de données répartis en 5 fichiers externes en les copiant en plus en memzone à chaque fois que vous lancez la map01 par exemple, et personne ne m'a signalé que le temps de chargement était trop long...
sérieux je crois pas que ca viennent a quelques 100emes de secondes pres
Hors ligne
oui mais si tu charge lis et interprete directement le fichier, c bien plus long..
par ex pr les CSV, ou je lis un fichier d'un coup, j'ai vu du lag (enfin du ralentissement) a cause du buffer ki prenais plus de temps, et c'est pour ça que j'utilise les fonctions dos !
Hors ligne
En général on manipule jamais un fichier directement, on l'ouvre, on charge son contenu et on le referme, et apres on travaille avec ce qu'on a chargé... :?
Hors ligne
dans le cas du PC c plus intéressant d'utiliser des méthodes avec buffer, car généralement les fichiers sur lesquels on travaille sont dans un disque dur et qui chacun le sait à un temps d'accès assez lent. Donc vaut mieux prendre 128K voir 256Ko d'un coup pour avoir de meilleures performances.
dans le cas de notre chère G100, c différent car le délai entre la Flash/Ram c kifkif.
Mnt à vous de faire des tests pour voir kel méthodes est plus rapide.
Hors ligne
voui pk pa, mais pour un traitement très simple genre xor c'est moins prise de tête ^^
Hors ligne
bon on va pas s'eterniser la dessus... STOP ca y'est on l'a la methode
Hors ligne