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 :
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# ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part memStream.Write(buffer, 0, bytesRead);
Merci d'avance.
Partager