Mit FTPClient falschen Dateinamen ausgelesen



  • Hallo.

    Ich habe Probleme mit Dateinamen die über eine Variable vom Typ FTPClient ausgelesen werden.
    Die Verbindung baue ich wie folgt auf:

    ftp.Timeout = 5000;
    ftp.RemoteHost = currentConfig.IP.ToString();
    ftp.ConnectMode = (currentConfig.Pasv) ? FTPConnectMode.PASV : FTPConnectMode.ACTIVE;
    ftp.Connect();
    ftp.Login(currentConfig.User, currentConfig.Password);
    ftp.ChDir(remotePath);
    ftp.Timeout = 20000;
    

    Habe ich z.B eine Datei mit dem Namen Aöüä.txt, bekomme ich im debuggen den Dateinamen a���.txt Diesen Problem tritt mit allen Umlauten auf.
    Der Dateiname ist aber auf dem PC, mit dem ich verbunden bin richtig.
    Unter dem Programm FileZilla hat man das gelich Problem. Dort kann man es lösen, in dem man unter Zeichensatz "ISO-8859-1" einstellt.

    Wie kann man das beim FTPCleint unter C# realisieren?

    Gruß

    Oli_1977



  • "FTPClient" gehört aber nicht zum NET-Framework, oder?

    Bei FtpWebRequest/FtpWebResponse kannst Du das encoding des streams angeben. Siehe hier:

    http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/8d4038c3-99b0-4990-8bee-5d2c28630ffa/



  • Hallo.

    Es gehört zum EnterpriseDT.Net.Ftp.FtpClient.

    Gruß

    Oli_1977



  • Hast Du da keinen StreamReader dem Du das korrekte Encoding mitteilen kannst?

    Zeig mal ein wenig Code.



  • Hallo.

    - Verbindung erstellen:

    ftp.Timeout = 5000;
    ftp.RemoteHost = currentConfig.IP.ToString();
    ftp.ConnectMode = (currentConfig.Pasv) ? FTPConnectMode.PASV : FTPConnectMode.ACTIVE;
    ftp.Connect();
    ftp.Login(currentConfig.User, currentConfig.Password);
    ftp.ChDir(remotePath);
    ftp.Timeout = 20000;
    

    - Daten und Anzeigen auslesen:

    // Remote aktualisieren
    lvRemote.BeginUpdate();
    lvRemote.Items.Clear();
    string daten;
    
    FTPFile[] items = MainForm.ftp.DirDetails();
    
    if (subLvlCounter > 0)
         lvRemote.Items.Add("..", 0);
    
         if (showSubdirs)
         {
             foreach (FTPFile item in items)
             {
    	     if (item.Dir && item.Name != ".")
    	     {
    		daten = item.Name.ToLower();
    		lvRemote.Items.Add(item.Name.ToLower(), 0);
    	     }
             }
         }
    
         foreach (FTPFile item in items)
         {
    
    	if (!item.Dir)
    	{
    	    daten = item.Name.ToLower();
    	    lvRemote.Items.Add(daten, 1);
    
    	}
         }
    
         lvRemote.EndUpdate();
    

    Hoffe das hilft weiter.

    Gruß

    Oli_1977





  • Hallo.

    Das Du nett bist, denke ich mir.

    Ich habe damit auch schon versuche gemacht. Leider ohne Erfolg.
    Ich hatte es wie folgt bei öffnen eingebaut:

    ftp.Timeout = 5000;
    ftp.RemoteHost = currentConfig.IP.ToString();
    ftp.ConnectMode = (currentConfig.Pasv) ? FTPConnectMode.PASV : FTPConnectMode.ACTIVE;
    ftp.Connect();
    ftp.Login(currentConfig.User, currentConfig.Password);
    ftp.ChDir(remotePath);
    ftp.Timeout = 20000;
    ftp.ControlEncoding = Encoding.UTF8;
    

    Ich kenne mich in c# nicht so aus, sollte doch aber stimmer? Oder?

    Oli_1977



  • Versuch doch bitte mal selbst weiter zu kommen.

    ftp.ControlEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
    


  • Hallo.

    Habe ich, das Ergebnis ist immer noch a���.txt

    Gruß

    Oli_1977


Anmelden zum Antworten