J'essaie d'annuler une opération de téléchargement. Mon scénario est le suivant:Erreur lors de la fermeture du flux ftp en C#
Lorsque l'utilisateur clique sur Annuler le téléchargement bouton pour cette action génère une exception dans la fonction de téléchargement qui est comme suit:
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + uri + "/" + fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.UsePassive = true;
response = (FtpWebResponse)reqFTP.GetResponse();
ftpStream = response.GetResponseStream();
_isItOutputStream = true;
string dataLengthString = response.Headers["Content-Length"];
int dataLength = 0;
if (dataLengthString != null)
{
dataLength = Convert.ToInt32(dataLengthString);
}
long cl = response.ContentLength;
int bufferSize = 4048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
bool first = true;
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
_actualDownloaded += readCount;
if (this.InvokeRequired)
{
ProgressBarDel _progressDel = new ProgressBarDel(ProgressBar);
this.Invoke(_progressDel, new object[] { _actualDownloaded, first });
}
first = false;
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
_isItOutputStream = false;
return true;
}
catch (Exception ee)
{
_downloadException = ee.Message;
if (response != null)
{
outputStream.Close();
ftpStream.Close();
response.Close();
}
return false;
}
Dans la ligne « ftpStream.Close()
» ici où l'exception est levée ...
Le texte d'exception est:
The remote server returned an error: (450) File unavailable (e.g., file busy)
où il ouvre un fichier à télécharger que ce que je l'ai écrit "outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
"Je ne vais pas fermer ce flux et de fermer la réponse dans l'ordre si l'utilisateur a fait comme suit: télécharger -> annuler télécharger -> télécharger -> annuler télécharger -> télécharger
si ce scénario s'est produit l'application se bloque . Je ne sais pas comment fermer le flux et la réponse afin que je puisse arrêter le téléchargement, puis supprimer le fichier créé afin de télécharger à nouveau.
thnx
le problème est quand je retélécharger un msg semble que ce fichier est utilisé (bcoz i Annulez la précédente. Le téléchargement et puis essayé de retélécharger à nouveau) – BDeveloper
Vous avez une erreur similaire (téléchargements de fichiers, après le téléchargement sur close() je reçois une erreur ftp 450). Avez-vous trouvé une solution à votre problème? – Sam