2016-07-10 24 views
0

Ich arbeite an einer einfachen FTP-Anwendung, liest das Server-Inventar eines Servers und zieht neue Dateien. Um dies zu tun, muss ich die Verzeichnisliste für ihren Inhalt lesen. Die FTP ListDirectoryDetails funktioniert einwandfrei, wenn die Dateinamen und/oder Unterverzeichnisnamen keinen Leerraum enthalten. Wenn das Verzeichnis jedoch Leerzeichen (d. H. Leerzeichen im Namen) enthält, löst mein Leser eine ObjectDisposed-Ausnahme aus. Der Stack-Trace enthält neben der folgenden Methode keinen Benutzercode (alles andere Methodenaufruf befindet sich im Framework).Streamreader werfen ObjectDisposed Ausnahme beim Lesen von FTP DirectoryList mit Leerzeichen

Ich habe gegoogelt und gegoogelt und etwas mehr gegoogelt ohne Glück diese Ausnahme zu erklären. Jede Hilfe wäre sehr willkommen! Vielen Dank!

public async Task<List<string>> ListDirectoryDetailsAsync() 
    { 
     var list = new List<string>(); 
     var request = CreateRequest(WebRequestMethods.Ftp.ListDirectoryDetails); 

     using (var response = (FtpWebResponse)await request.GetResponseAsync()) 
     using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) 
     { 
      while (!reader.EndOfStream) 
      { 
       list.Add(reader.ReadLine()); 
      } 
     } 
     return list; 
    } 
+0

Versuchen Sie: reader.ReadLine(). Trim() – jdweng

+0

Danke, aber das Problem, mit dem ich konfrontiert bin, ist mit Leerraum im Verzeichnis/Dateiname selbst - nicht Leerzeichen am Anfang oder Ende. Also, Beispiel, CMorton9249

Antwort

0

Ich habe Ihren Code lokal gegen den FileZilla Server (Version 0.9.57 Beta) getestet. Ihr Code liest Verzeichnisnamen mit Leerzeichen sehr gut. Ich nehme an, dass Ihr Problem spezifisch für Ihre Daten oder Umgebung ist. Die Erfassung des Netzwerkverkehrs kann einige Einblicke geben.

+0

Ich dachte, es wäre auch! Ich muss zugeben, geschockt zu sein, dieses Problem zu haben. Ich habe nicht gegen den FileZilla-Server versucht, aber es ist sicherlich einen Versuch wert. Da der Großteil meiner Erfahrung beim Aufspüren von Netzwerkproblemen von einem Browser zum Server reicht, ist das Erfassen dieser Art von Netzwerkverkehr für mich Neuland. Hast du irgendwelche guten Vorschläge für ein Tool, das ich ausführen sollte, während ich telefoniere? Erwähnenswert ist an dieser Stelle, dass ich keinen direkten Zugriff auf den FTP-Server (gehostete Lösung) habe. – CMorton9249

+0

Ich würde vorschlagen, zuerst den FileZilla Server in Ihrer Entwicklungsumgebung zu installieren und einige Datei-/Verzeichnisnamen zu erstellen, die diese Ausnahme in Ihrer Produktionsumgebung verursachen. Wenn die Ausnahme weiterhin auftritt, suche ich lieber auf der Client-Seite (z. B. .net Framework-Version; mein Experiment wurde mit 4.6.1 durchgeführt). Zur Erfassung des Netzwerkverkehrs empfehle ich Wireshark (https://www.wireshark.org/). –

+0

Ich habe FileZilla Server auf meinem Rechner installiert und kann das Szenario erfolgreich neu erstellen. Offensichtlich wird bei der Verwendung von ReadLine() für einen Dateinamen, der Leerzeichen enthält, der zugrunde liegende Stream des StreamReaders angeordnet. Die IDisposedObjectException tritt auf, wenn die Schleife versucht, festzustellen, ob eine andere ReadLine() erforderlich ist. – CMorton9249