Я пытаюсь отменить операцию загрузки. Мой сценарий выглядит следующим образом:
Когда пользователь нажимает кнопку «Отменить загрузку», это действие вызывает исключение в функции загрузки, которое выглядит следующим образом:
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;
}
В строке "ftpStream.Close()" здесь возникает исключение...
Текст исключения:
Удаленный сервер вернул ошибку: (450) Файл недоступен (например, файл занят)
где он открывает файл для загрузки, как я написал "outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);", я не буду закрывать этот поток и закрывать ответ, если пользователь сделал следующее: загрузить -> отменить загрузку -> загрузить -> отменить загрузку -> загрузить
если этот сценарий произошел, приложение зависло. я не знаю, как закрыть поток и ответ, чтобы я мог остановить загрузку, а затем удалить созданный файл, чтобы загрузить его снова.
спасибо