Je construis une classe d'utilitaire FTP en C#. Dans le cas où un WebException
est lancé sur un appel à FtpWebRequest.GetResponse()
, dans mon cas l'exception est levée pour le fichier demandé non existant sur le serveur distant, la variable FtpWebResponse
est hors de portée. Mais même si je déclare la variable en dehors du bloc try..catch
, j'obtiens une erreur de compilation disant "Utilisation de la variable locale non assignée '", mais pour autant que je sache, il n'y a aucun moyen de l'assigner tant que réponse via la méthode FtpWebRequest.GetResponse()
.Comment attraper une exception FtpWebResponse en C#
Quelqu'un peut-il s'il vous plaît aviser, ou est-ce que je manque quelque chose d'évident?
Merci!
Voici ma méthode actuelle:
private void Download(string ftpServer, string ftpPath, string ftpFileName, string localPath,
string localFileName, string ftpUserID, string ftpPassword)
{
FtpWebRequest reqFTP;
FtpWebResponse response;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://"
+ ftpServer + "/" + ftpPath + "/" + ftpFileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID,
ftpPassword);
/* HERE IS WHERE THE EXCEPTION IS THROWN FOR FILE NOT AVAILABLE*/
response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
FileStream outputStream = new FileStream(localPath + "\\" +
localFileName, FileMode.Create);
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (WebException webex)
{
/*HERE THE response VARIABLE IS UNASSIGNED*/
if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) {
//do something
}
}
jeez, je n'ai même pas essayé cela. Merci pour les deux conseils! J'ai regardé WebExceptionStatus et je ne savais pas s'il y avait un type défini spécifiquement pour 'fichier non trouvé'. Je vais regarder dans ce plus mais le nul devrait le faire. – jaywon
Cela résout le problème de variable locale non affectée, mais n'aide pas à attraper l'exception car la réponse sera toujours nulle lorsque l'erreur se produit. Cochez cette question pour trouver la bonne solution: http://stackoverflow.com/questions/347897/how-to-check-if-file-exists-on-ftp-before-ftpwebrequest – Marc
Marc, notez que j'abordais à la fois le problème en général, ainsi que le cas spécifique avec le 'WebException' - voir le paragraphe du bas (qui est la même solution en bref que celle fournie dans votre lien). – Lucero