[C++] lecture fichier de plusieurs Giga

Résolu/Fermé
grorel
Messages postés
6
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
30 octobre 2007
- 24 juil. 2007 à 13:22
dubcek
Messages postés
18503
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 mai 2022
- 26 juil. 2007 à 10:52
Salut,

je dois lire quelques bytes dans un fichier faisant plusieur Giga d'espace disque (parfois plusieurs centaines) et bien entendu, les fonctions de la classe CFile ne sont pas adaptée. En effet, la variable qui donne la fonction du fichier est un DWORD (environ 4Go).
Pour le moment, je peux, en rentrant la taille du fichier à la main, faire un Read de tout le fichier et ca prend énormément de temp. La fonction seek fonctionne sur les 4 premier Giga puis renvoie une erreur. C'est assez embetant parce que j'ai besoin de lire un byte tous les 262144 bytes .......

Donc, j'aurais besoin d'une fonction permettant de se déplacer sans lire dans le fichier et pouvant atteindre des dimensions tres importantes.

Merci beaucoup d'avance!

6 réponses

dubcek
Messages postés
18503
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 mai 2022
5 547
24 juil. 2007 à 13:30
Pour dépasser la limite de 4Gb, n'y-a-t-il pas des fonctions open64, read64, lseek64 etc ?

Ca doit être ca:
Run-Time Library Reference
_lseek, _lseeki64

Moves a file pointer to the specified location.
https://www.microsoft.com/en-us/download/details.aspx?id=55984
0
grorel
Messages postés
6
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
30 octobre 2007

24 juil. 2007 à 16:20
Merci, c'est exactement ce qu'il me faut.....

....sauf que ca marche qu'avec visual .net et que je suis sous visual 6.0. (oui j'avais oublier de préciser). Donc si tu connais un équivalent pour cette version ce serait super.

Merci en tout cas de ton aide, je continue a chercher.
0
dubcek
Messages postés
18503
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 mai 2022
5 547
24 juil. 2007 à 16:42
lseek64 (sans i), je ne vois pas trop d'autre choix, à moins que 6.0 ne supporte pas les fichiers > 4Gb.
voir la doc.
et une option de compilation, genre largefile ?

là: https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa246460(v=vs.60)?redirectedfrom=MSDN
c'est la doc 6.0
_lseek, _lseeki64 Reposition file pointer to given location

quoi que, mauvaise nouvelle peut-êre
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=422910&SiteID=1

Sorry Visual C++ 6.0 is way too old for this (64bit was still pretty much a small niche market back in 1998). Visual C++ 6.0 is also no longer supported - you should upgrade to Visual C++ 2005.
0
grorel
Messages postés
6
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
30 octobre 2007

25 juil. 2007 à 09:35
La fonction _lseeki64 fonctionne sur VC++ 6.0. Mais elle est aussi lente que la fonction read de base. Je pensais pourtant qu'il y avait moyen d'accélérer le traitement de mes données si je bougais juste le pointeur (surtout que je lit un byte tous les 262144 bytes). enfin....

Donc pour se déplacer dans un fichier de plusieurs Giga, c'est _lseeki64 qu'il faut utiliser si on est rester a VC++ 6.0. Mais si on se déplace uniquement dans le sens de la lecture, ben c'est pas plus rapide finalement qu'un bon vieu read, meme si ca économise la place en mémoire du buffer.

Merci de ton aide en tout cas, je vais garder mon programme tel quel. tant pis, je lancerais mes tests la nuit et ca sera fini le matin. ;)
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek
Messages postés
18503
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 mai 2022
5 547
26 juil. 2007 à 09:08
C'est bizarre, car le rôle de lseek c'est de se positionner directement sur le byte choisi. Ca doit être immédiat.
0
dubcek
Messages postés
18503
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 mai 2022
5 547
26 juil. 2007 à 10:52
C'est lseek ou le programme qui est lent ?
le probléme vient surement d'ailleurs .
faire des tests en affichant le temps avant et après le lseek.
0