Je dois analyser un fichier de 16 Go. Je lis dans le fichier séquentiellement à l'aide de Fread () code> et
fseek () code>. Est-ce réalisable?
Fread () code> fonctionne pour un fichier aussi grand? P>
5 Réponses :
Cela dépend de ce que vous voulez faire. Si vous souhaitez lire l'ensemble de 16 Go de données en mémoire, il est probable que vous risquez de sortir de la mémoire ou du tas d'applications. P>
Plutôt lire le morceau de données par le morceau et le traitement de ces morceaux (et des ressources libres lorsque vous avez terminé). P>
Mais, outre tout cela, décidez quelle approche que vous souhaitez faire (en utilisant Fread () code> ou
istream code>, etc.) et faites quelques cas de test pour voir les travaux mieux pour vous. P>
Si mis en œuvre correctement, cela ne devrait pas être un problème. Je suppose par séquentiellement, vous voulez dire que vous regardez le fichier dans des morceaux discrets et de faire avancer votre pointeur de fichier. P>
Consultez http: / /wwww.computing.net/answers/programmer/us-fread-with-a-large-file-/10254.html P>
On dirait qu'il faisait presque la même chose que vous. P>
Vous ne mentionnez pas une langue, alors je vais supposer c. p>
Je ne vois aucun problème avec Ces fonctions utilisent Vous devez voir à quel point envisagez d'utiliser Fread code>, mais
fseek code> et
ftell code> peut avoir des problèmes. P>
long int code> comme type de données pour maintenir la position de fichier, plutôt que quelque chose d'intelligent comme
FPOS_T code> ou même
taille_t code>. Cela signifie qu'ils ne peuvent pas échouer sur un fichier sur 2 Go et peuvent certainement échouer sur un fichier de 16 Go. P>
long int code> est sur votre plate-forme. Si c'est 64 bits, tu vas bien. Si c'est 32 ans, vous avez probablement des problèmes lors de l'utilisation de
fTell code> pour mesurer la distance entre le début du fichier. P>
fgetPOS code> et
fsetpose code> à la place. p>
Le commentaire ".. Vous ne pouvez pas utiliser légalement fseek code> offsets sans appel à
fTell code>" i> est vrai pour les fichiers ouverts Mode texte. Les fichiers ouverts en mode binaire peuvent utiliser
wek_set code> et
west_cur code> avec des compensations arbitraires.
@CAF: merci. Ma réponse a été modifiée comme vous l'avez suggéré.
Si vous êtes sur un système POSIX-ISH, vous devez vous assurer que vous avez construit votre programme avec un support de compensation de fichier de 64 bits. Les mandats de POSIX (ou au moins le permettent au moins et la plupart des systèmes appliquent ceci) la mise en œuvre pour refuser les opérations IO sur les fichiers dont la taille ne correspond pas à sur Linux, cela signifie que vous devez utiliser off_t code>, même si le seul IO étant effectué est séquentiel sans recherche. . p>
-d_file_offset_bits = 64 code> dans la ligne de commande
gcc code>. p>
Merci pour la réponse. J'ai compris où j'allais mal. fsek () code> et
fTell () code> ne fonctionne pas pour les fichiers supérieurs à 4 Go. J'ai utilisé
_fseeki64 () code> et
_ftelli64 () code> et ça marche bien maintenant. P>
Pouvez-vous clarifier la langue utilisée?
Je vais aller de l'avant et deviner c
Faites-ils des fread et Fsek existent même comme des normes dans une autre langue?