[c / win32] lire un fichier ligne par ligne

Soyez le premier à donner votre avis sur cette source.

Vue 14 558 fois - Téléchargée 673 fois

Description

Fonctions permettant de lire un fichier ligne par ligne facilement et rapidement...
Supporte les fichiers texte creer sous windows, mac ou unix.

LPOPENL __stdcall OpenLine(LPSTR FileName, BYTE FileType);
DWORD __stdcall ReadLine(LPOPENL lpoLine, DWORD nLine, LPSTR LineOut);
void __stdcall CloseLine(LPOPENL lpoLine);
int __stdcall GetTypeOfFile(LPSTR FileName);

Source / Exemple :


S'utilise comme suit:

LPOPENL lpoLine;
lpoLine = OpenLine(Nom_Du_Fichier, Type_Du_Fichier);

Si vous connaissez deja le type du fichier remplacer Type_Du_Fichier par une des define suivante:
 OPENL_WINDOWS_FILE
 OPENL_UNIX_FILE
 OPENL_MAC_FILE

Sinon Utiliser GetTypeOfFile(Nom_Du_Fichier) qui retournera une des valeurs ci dessus...

ReadLine(lpoLine, Numero_de_la_ligne, Buffer_De_Retour);

Pour connaitre la taille d'une ligne:
ReadLine(lpoLine, Numero_de_la_ligne, 0);

et une fois que vous avez fini ne pa oublier d'apeller CloseLine
CloseLine(lpoLine);

Conclusion :


Voila..

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
101
Date d'inscription
samedi 9 février 2002
Statut
Membre
Dernière intervention
5 mai 2009

A possible benefit of memory-mapped files is a "lazy loading", thus using small amounts of RAM even for a very large file. Trying to load the entire contents of a file that is significantly larger than the amount of memory available can cause severe thrashing as the operating system reads from disk into memory and simultaneously pages from memory back to disk. Not only memory-mapping may bypass the page file completely, but the system only needs to load the smaller page-sized sections as data is being edited, similarly to demand paging scheme used for programs.
http://en.wikipedia.org/wiki/Memory-mapped_file

En gros, ça veut dire que quand tu veux faire une édition dans une partie de ton fichier mappé, l'OS va charger en mémoire un bout du fichier (1k,4k ? taille des pages ?). Si tu fais une écriture, il va ensuite la répercuter sur le fichier. Mais en aucun cas il y a une correspondance directe entre mémoire utilisée par le programme et la taille du fichier. (Encore que pour un petit fichier, genre 80Mo, ya tout de même des chances qu'il soit entierement en mémoire!)
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
J'ai pas trouver beaucoup d'exemples sur le File Mapping, ca a l'air de marcher mais si je charge un fichier de 80mo ca prend tjrs 80mo en memoire...

Neo_Fr
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Utilise le FileMapping comme dit plus haut, en balladant un pointeur dedans c'est le systeme qui assurera le chargement par taille de page mémoire à ta place.
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Je me suis contenter de controler les retours de fonctions..
Pour la lecture du fichier bloc par bloc sa devener trop compliquer et trop risquer..
Si ta d'autre conseilles hesite pas..

Neo_Fr
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Avec heap limité au thread qui s'en servira alors no prob pour HEAP_NO_SERIALIZE.
Par principe, utiliser VirtualAlloc pour blocs >= 4 Mo.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.