3 Stimmen

c# 4 : Prüfen, ob FTP-Verzeichnis existiert

Ich habe eine Klasse für alle meine FTP-Übertragungen Hexe funktionieren gut in C# 3.5, aber da ich aktualisiert, um das Framework 4, ich habe einige Probleme.

Ich suche auf Google, finde aber keine Lösungen.

Insbesondere mit einer Methode zur Überprüfung, ob ein Verzeichnis existiert:

public bool DirectoryExists(string directory)
{
  bool directoryExists = false;
  if (directory.Substring(0, 1) != "/")
    directory = "/" + directory;
  FtpWebRequest request = GetFtpWebRequest(host + directory, WebRequestMethods.Ftp.PrintWorkingDirectory);
  try
  {
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
    {
      directoryExists = true;
    }
  }
  catch (WebException)
  {
    directoryExists = false;
  }
  return directoryExists;
}

private FtpWebRequest GetFtpWebRequest(string url, string method)
{
  FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
  request.UseBinary = true;
  request.KeepAlive = true;
  request.UsePassive = (mode == Modes.Passive);
  request.Timeout = Timeout.Infinite;
  request.ServicePoint.ConnectionLimit = 6;
  request.ReadWriteTimeout = Timeout.Infinite;
  if (credential == null)
    credential = new NetworkCredential(login, password);
  request.Credentials = credential;
  request.Method = method;
  return request;
}

Die Methode DirectoryExists gibt immer true zurück (auch wenn das Verzeichnis nicht existiert), aber nur auf dem Framework 4, bevor eine Ausnahme von GetFtpWebRequest geworfen wurde, wenn das Verzeichnis nicht existiert.

Hatte jemand dieses Problem?

Bitte sagen Sie mir nicht, dass ich eine andere Bibliothek verwenden soll, denn alle meine Programme hängen von dieser ab und ich möchte nicht alle aktualisieren ...

2voto

DJGrizz Punkte 21

Einfach umziehen:

WebRequestMethods.Ftp.PrintWorkingDirectory

zu ...

WebRequestMethods.Ftp.ListDirectory

und Ihr Code wird in .NET 4.0 problemlos funktionieren.

1voto

user3190933 Punkte 146

Das Problem ist, dass in der neuen Implementierung (4.0) der Client den Befehl 'CWD' nicht sendet. Verwenden Sie die Methode SetMethodRequiresCWD() von hier microsoft LÖSUNG https://support.microsoft.com/en-us/kb/2134299

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