hello , alors je m'explique.

J'ai une appli qui doit pouvoir envoyer des fichiers , y compris les (très) volumineux, un chargement en mémoire d'un coup occupant trop de ram (1gb+ pour un fichier de 700 mo) , j'ai décidé de m'orienter vers des transferts "par morceaux".

donc : -je découpe une partie du fichier, et place la partie dans un byte[1000]
-je copie ce tableau dans le FileStream de destination
autant de fois qu'il y a de tableaux....

mon probleme , c'est que ca marche bien pour les fichiers texte (.doc ou .txt ) par contre les autres types de fichiers sont corrompus.

je voulais donc savoir si j'ai fai une erreur ou si ce type de découpage empeche de reconstituer des fichiers .exe ou x.xml.

Merci pour votre aide !

voila le code (ps: c'est un petit projet histoire de test, c'est mal codé ,je sais )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
        }
        FileStream br;       
        private void buttonlancertransfert_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
            br = new FileStream(ofd.FileName, FileMode.Open);
            FileInfo finfo = new FileInfo(ofd.FileName);
            bool valid = true; 
            FileStream fileStream = new FileStream(@"C:\Users\Aug\Desktop\" + finfo.Name , FileMode.Create);        
            while (valid)
            {
               MemoryStream ms  = recupFichier();
               if (ms.Length != 0)
               {                
                   byte[] buffer = ms.ToArray();              
                   fileStream.Write(buffer, 0 , buffer.Count()  );               
                   if (ms.Length != 1000)
                   {
                       valid = false;
                   }
 
               }
               else valid = false;
 
            }
            fileStream.Close();
 
        }
 
        private MemoryStream recupFichier()
        {
            int byt;
            MemoryStream ms = new MemoryStream(1000);
 
            while (true)
            {
            byt = br.ReadByte();
 
               if (byt != -1)
               {
                if (ms.Length == 1000)
                {
                    return ms;
                }
                else ms.WriteByte(((byte)byt));
               }
               else return ms;
            }
 
        }
    }