[C++] lecture fichier de plusieurs Giga
Résolu
grorel
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
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!
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!
A voir également:
- [C++] lecture fichier de plusieurs Giga
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
6 réponses
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
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
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.
....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.
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.
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.
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+
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question