Bonjour,

Lors du téléchargement d'un fichier de 400 Mo, mon programme lève une exception de type "System.OutOfMemoryException" En dessous de cette taille cela ne pose pas de problème.

Voici mon code :

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 public void telechargerFichier(string fichier)
        {
            byte[] downloadedData;
            downloadedData = new byte[0];
            Stream reader = null;
            MemoryStream memStream = new MemoryStream();
            FtpWebResponse response = null;
 
            try
            {
 
                FtpWebRequest request = FtpWebRequest.Create(url + "/" + fichier) as FtpWebRequest;
 
                request.Credentials = new NetworkCredential("ftp", "");
                request.UsePassive = true;
                request.UseBinary = true;
                request.KeepAlive = true;
 
                request.Method = WebRequestMethods.Ftp.DownloadFile;
                //Streams
                response = request.GetResponse() as FtpWebResponse;
                reader = response.GetResponseStream();
 
                request = FtpWebRequest.Create(url + "/" + fichier) as FtpWebRequest;
                request.Method = WebRequestMethods.Ftp.GetFileSize;
                request.Credentials = new NetworkCredential("ftp", "");
                request.UsePassive = true;
                request.UseBinary = true;
                request.KeepAlive = true; //don't close the connection
 
                int dataLength = (int)request.GetResponse().ContentLength;
 
                //Download to memory              
                memStream = new MemoryStream();
                byte[] buffer = new byte[1024]; //downloads in chuncks
 
                while (true)
                {
                    Application.DoEvents();
 
                    int bytesRead = reader.Read(buffer, 0, buffer.Length);
 
                    if (bytesRead == 0)
                    {
                        break;
                    }
                    else
                    {
                        //Write the downloaded data
                        memStream.Write(buffer, 0, bytesRead);
 
                    }
                }
 
                //Convert the downloaded stream to a byte array
                downloadedData = memStream.ToArray();
 
                Application.DoEvents();
                //Enregistrement du fichier sur le disque
                if (downloadedData != null && downloadedData.Length != 0)
                {
                    //Write the bytes to a file
                    FileStream newFile = new FileStream(@"C:\FTP\" + fichier, FileMode.Create);
                    newFile.Write(downloadedData, 0, downloadedData.Length);
 
                }
                //Clean up
                reader.Close();
                memStream.Close();
                response.Close();
 
            }
            catch (Exception e)
            {
 
            }
 
        }

L'exception est levée sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 memStream.Write(buffer, 0, bytesRead);
Quelqu'un a-t-il une idée sur la façon de procéder pour télécharger des gros fichiers via FTP en C# ?

Merci d'avance.