simoryl
Messages postés5Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention21 août 2007
-
20 août 2007 à 17:23
simoryl
Messages postés5Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention21 août 2007
-
21 août 2007 à 12:27
Salut,
Voilà, je cherche à faire un seek sur un gros fichier depuis la fin
dans le but de récupérer les 5 derniers Mo d'un fichier de 6Go.
Quand je fais un seek avec soFromEnd, il me met en position 0 et donc me recopie le fichier...
J'ai essayé de faire des seek successif depuis le début du fichier
pour arriver à la position souhaitée mais j'arrive au mieux à une
position de -294967296 octets et donc loin de mes 5Mo.
Est-ce que quelqu'un connait une solution à mon problème?
simoryl
Messages postés5Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention21 août 2007 21 août 2007 à 12:27
En effet, en lisant un octet tous les 100000, j'arrive à parcourir mon fichier du début vers la fin (mais pas l'inverse). Bon benh ça marche du coup :-)
simoryl
Messages postés5Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention21 août 2007 21 août 2007 à 00:22
En fait, Stream.size me renvoi une valeur négatif (-700 milles et quelques)mais quelques recherches m'ont permis de constater que c'est un souci souvent rencontré avec un fichier très très gros.
J'ai essayé avec soFromCurrent depuis le début ou la fin mais sans succès. Depuis le début, il fini par bloquer vers 2Go et depuis la fin, il n'arrive jamais à se positionner et reste à la position 0.
Simo'
Vous n’avez pas trouvé la réponse que vous recherchez ?
simoryl
Messages postés5Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention21 août 2007 21 août 2007 à 11:19
je met bien en Int64 et en négatif quand j'utilise un soFromEnd. Sinon, le fichier est juste à côté de mon appli' sur le disque dur local.
Je précise qu'avec un fichier de 4.3Go c'est passé sans souci... Etrange...
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 21 août 2007 à 11:26
"J'ai essayé de faire des seek successifs depuis le début du fichier pour arriver à la position souhaitée..."
Une idée comme ça...:
-Peut-être essayer de lire, ne serait-ce qu'un octet, entre chaque seek...
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 21 août 2007 à 12:26
Bonjour
Une autre idée en passant. Tu utilises un int64 comme définition de type, ok mais utilises tu une constante typée ?
Stream.Seek( 1 shl 31, soFromCurrent);
// 1 shl 31 = -2147483648 considéré par défaut comme un Integer (32bits)
Stream.Seek( int64(1 shl 31), soFromCurrent);
// int64(1 shl 31) = 2147483648, on oblige le compilateur à traiter la constante en tant que int64
N.B. Cela expliquerait également pourquoi un fichier plus gros fonctionne. Dans ce cas là tu dépasses forcément la limite de valeur que peut contenir un entier 32 bits, et le compilateur utilises un int64 pour pouvoir la stocker.
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein