Download FTP : System.OutOfMemoryException
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:
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:
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.