[C#] Pb de découpage de Fichier
Je souhaite découper mon fichier en N autres fichiers de NB Lignes. Plus précisément, je récupère N tableaux de bytes (réprésentant au moins NB lignes).
Je lit mon fichier principale ligne par ligne. je copie dans un memoryStream et après je fais memoryStream.ToArray() pour récuperer un tab de byte...
Malheureusement (il faut bien que quelque chose cloche), il y a des problèmes dans la copie (j'obtiens des motiées de lignes des fois et en gros il manque des lignes) ...
J'ai une autre fonction detacheFichierPart pour reconstituer le fichier....
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
public class Geocode
{
const int NB = 1000;
public ArrayList partFichier;
// public ArrayList partFichierGeo;
public Geocode()
{
partFichier = new ArrayList();
//partFichierGeo = new ArrayList();
}
public void AttacheFichierPart(ParametresGeo paraG, string filename)
{
....
try{
Stream stream = new FileStream(filename, FileMode.Open);
//Si le fichier fait -NB ligne pas de découpage
if (main.GU_VS2003.nbTableRows <= NB)
//nbTableRows: nbligne du fichier
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
partFichier.Add(buffer);
return;
}
int nbPart = main.GU_VS2003.nbTableRows / NB;
int rest = main.GU_VS2003.nbTableRows - (nbPart * NB);
//Decoupage
StreamReader reader = new StreamReader(stream);
for (int i = 0; i < nbPart; i++)
{
MemoryStream temp = new MemoryStream();
StreamWriter writer = new StreamWriter(temp);
for (int j = 0; j < NB; j++)
{
writer.WriteLine(reader.ReadLine());
}
partFichier.Add(temp.ToArray());
writer.Close();
temp.Close();
}
//Dernier fichier si il reste des lignes
if (rest > 0)
{
MemoryStream tempFin = new MemoryStream();
StreamWriter writerFin = new StreamWriter(tempFin);
for (int j = 0; j < rest; j++)
{
writerFin.WriteLine(reader.ReadLine());
}
partFichier.Add(tempFin.ToArray());
tempFin.Close();
writerFin.Close();
}
reader.Close();
stream.Close();
}
catch (Exception e)
{
//traitement exception
}
}
public void DetacheFichierPart(string rep, string namefile)
{
//recuperation fichier geocoder du serveur
if (!Directory.Exists(rep))
Directory.CreateDirectory(rep);
...
StreamWriter sOut = null;
Stream streamOut = null;
MemoryStream file = null;
StreamReader sIn = null;
try
{
streamOut = new FileStream(rep + namefile + ".csv", FileMode.Create);
sOut = new StreamWriter(streamOut);
IEnumerator enumerator = partFichier.GetEnumerator();
while (enumerator.MoveNext())
{
file = new MemoryStream((byte[])enumerator.Current);
sIn = new StreamReader(file);
sOut.Write(sIn.ReadToEnd());
}
}
catch (Exception e)
{
//traitement exception
}
finally
{
if (sIn != null)
sIn.Close();
if (sOut != null)
sOut.Close();
if (streamOut != null)
streamOut.Close();
if (file != null)
file.Close();
}
} |
Pour tester, je fait AttacheFichierPart(...) puis DetacheFichierPart() Et bien sûr ce n'est pas exactement le même fichier....
Je trouve pas mon erreur:cry: :cry: :cry: :cry:
:merci: d'avance pour tout aide