2 Stimmen

Prüfen, ob eine Datei auf dem FTP-Server existiert oder nicht, bevor sie heruntergeladen wird

Bevor ich eine Datei von einem FTP-Server herunterlade, möchte ich prüfen, ob sie vorhanden ist oder nicht, wenn nicht, muss ich Ausnahme auslösen. Das Codebeispiel funktioniert, wenn die Datei nicht vorhanden ist. Wenn die Datei jedoch vorhanden ist, springt nach der Ausführung der Zeile "ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;" der zweite Catch-Block und druckt "Error: Dieser Vorgang kann nicht ausgeführt werden, nachdem die Anforderung übermittelt wurde.", was ist der Punkt, den ich nicht sehen kann Danke für Antworten.

public void fileDownload(string fileName)
        {
            stream = new FileStream(filePath + fileName, FileMode.Create);
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + fileName));
            ftpRequest.Credentials = new NetworkCredential(userName, password);
            ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;

            try
            {
                response = (FtpWebResponse)ftpRequest.GetResponse();
                ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
                ftpRequest.UseBinary = true;
                response = (FtpWebResponse)ftpRequest.GetResponse();
                ftpStream = response.GetResponseStream();
                cl = response.ContentLength;
                bufferSize = 2048;
                buffer = new byte[bufferSize];
                readCount = ftpStream.Read(buffer, 0, bufferSize);

                while (readCount > 0)
                {
                    stream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }

                ftpStream.Close();
                stream.Close();
                response.Close();
                Console.WriteLine("File : " + fileName + " is downloaded from ftp server"); 
            }
            catch (WebException ex)
            {
                 FtpWebResponse res = (FtpWebResponse)ex.Response;
                 if (res.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                 {
                     stream.Close();
                     File.Delete(filePath + fileName);
                     Console.WriteLine("File : " + fileName + " does not exists on ftp server");
                     System.Diagnostics.Debug.WriteLine("Error: " + fileName + " is not available on fpt server");
                 }
            }   
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
            }
        }

2voto

Hans Olsson Punkte 52909

Soweit ich weiß, müssen Sie eine neue FtpWebRequest für jeden Antrag, den Sie stellen. Bevor Sie also die Method müssen Sie einen neuen erstellen und die Anmeldedaten erneut eingeben. Sie müssten also die folgenden zwei Zeilen wiederholen:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + fileName));
ftpRequest.Credentials = new NetworkCredential(userName, password);

0voto

AnthonyLambert Punkte 8455

Wenn Sie eine Verbindung zu einem FTP-Server herstellen, können Sie die Uri als "ftp//ftp.domain.com/somedirectory" angeben, aber dies bedeutet übersetzt: "ftp://ftp.domain.com/homedirectoryforftp/somedirectory". Um das vollständige Root-Verzeichnis zu definieren, verwenden Sie "ftp://ftp.domain.com//somedirectory", was auf dem Rechner //somedirectory bedeutet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X