Selections de parties d'un très lourd fichier

Signaler
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
-
 cs_Robert33 -
Bonjour,

Le titres n'est certainement pas très explicite et je ne dois pas être dans la bonne section, je m'en excuse par avance.

Voilà, j'ai un énorme fichier de 10 Go.

J'aimerai prendre Go par Go et travailler dessus les uns à la suite des autres.
En fait j'aimerai mettre le 1er Go du fichier dans byte[], travailler dessus, puis le second Go du fichier dans byte[], travailler dessus... jusqu'au dernier Go.

BabaOrhumFile est le fichier de 10 Go.
FileStream StreamFichier = new FileStream(BabaOrhumFile, FileMode.Open, FileAccess.Read);
byte[] Fichier = new byte[StreamFichier.Length];

Une erreur apparait à la dernière ligne car le fichier est beaucoup trop grand/lourd.


Ce que je ne sais pas faire c'est prendre des parties du fichier.


Voilà, en espérant avoir été à peu près claire, je vous remercie de votre attention.

23 réponses

Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
salut
il faudrait que le seche ce que souhaite faire du fichier
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
hm hm tu veux plutôt dire :
"Il faudrait que je sache ce que tu veux faire du fichier", non ? (je taquine)

C'est ensuite pour pouvoir chercher et éventuellement trouver une suite de lettres et caractères par exemple "SAUPIQUET x3*-^", mais bon ça je sais faire.
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
oki oui , defois je tape dans des positions pas catholique lool ! passons...

la dans ton cas , maintenant que je sais que tu veux faire une recherche le mieu est de faire du lignes / lignes

car decoupé suivant un tableau de X byte n'est pas edéaquta car tu a 90 % de chance de tomber sur les lignes coupé , et ca rendrait ta recherche erronée!

donc

            
using (System.IO.StreamReader reader = new System.IO.StreamReader(BabaOrhumFile, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
      String ligne = null;
      while ((ligne = reader.ReadLine()) != null)
      {
           // ton traitement
      }
}
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Merci.
Ligne par ligne serait une bonne idée effectivement s'il s'agissait d'un texte construit, mais il s'agit d'un fichier traité en hexadécimal donc c'est "une seule ligne" à lui tout seul. Donc ça ne va pas. (je corse les choses d'un coup ^^)

Il y aurait 10 coupes, sur plusieurs millions de caractères, faut vraiment pas avoir de bol de couper sur mon "SAUPIQUET x3*-^" (mot de 8 à 12 caractères/lettres).
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
alors


            
using (System.IO.StreamReader reader = new System.IO.StreamReader(BabaOrhumFile, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
      Char[] buffer = new Char[1024];
      int pos = 0;
      int readchar = 0;
      while ((readchar = reader.Read(buffer,pos,1024)) > 0 )
      {
           // ton traitement

           pos += readchar;
      }
}


pi t'arrete de m'embetter, non mé hoo :)
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
^^, merci je teste ça cette nuit ou demain, je pars à la mer aujourd'hui.

Bon week end et fait gaffe à la luxure luxation avec tes positions pas "très catholique".
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Bonjour,

J'ai essayé avec un "string path "bidon" et voilà le résultat :



[url=http://omega.mezimages.net/51fuaEL4cd6dzf.png]


Aurais-je loupé quelque chose ?

Merci.
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Personne ?
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
J'ai dit une connerie ?
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
salut
enleve System.IO.FileMode.Open, System.IO.FileAccess.Read


using (System.IO.StreamReader reader = new System.IO.StreamReader(BabaOrhumFile))
{
      Char[] buffer = new Char[1024];
      int pos = 0;
      int readchar = 0;
      while ((readchar = reader.Read(buffer,pos,1024)) > 0 )
      {
           // ton traitement

           pos += readchar;
      }
}
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Bonjour et merci,

Je teste depuis hier soir, je n"'ai plus d'erreur sur cette ligne, cependant maintenant j'ai une erreur sur celle-ci :
while ((readchar = reader.Read(buffer, pos, 1024)) > 0)


:/

Une idée ?

Merci.

Signé : la boulet.
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Voici l'erreur que j'ai :



Merci de votre aide passée et/ou future.
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Bonjour,
Vraiment personne pour m'aider ?
Merci.
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Ou alors une autre piste.
Merci.
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Aidez-moi.
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
S'il vous plait.
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Je vous en prie... :'(
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Personne vraiment ?


Peut-être que je prends un char[] trop grand ?

Char[] buffer = new Char[1024];
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Bah je tente des trucs sans succès :
Char[] buffer = new Char[512];
                    int pos = 0;
                    int readchar = 0;
                    while ((readchar = reader.Read(buffer, pos, 512)) > 0)
                    {

Donne encore :
Offset et length étaient hors limites pour ce tableau ou bien le nombre est supérieur au nombre d'éléments de l'index à la fin de la collection source.
Messages postés
104
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
7 avril 2019
1
Personne ne peut m'aider svp ?