FTP-Fehler (553) Dateiname nicht zulässig.

Günther Weber

New Member
Hallo,

Ich programmiere in C# Silverlight und WPF Anwendungen. Der Kollege, der beim Auftraggeber für die Datenpflege zuständig ist, soll seine Arbeit möglichst bequem erledigen können. Deshalb habe ich ein Programm entwickelt, das die Daten für das Programm aufbereitet, dafür sorgt dass die Silverlight-Version mit den geänderten Daten neu compiliert wird, sowie alle Daten, die Silverlight und die WPF Programmversion via FTP auf den Server des Auftraggebers hochlädt.

Den Programmtest habe ich zuerst auf meiner eigenen Homepage ohne Probleme durchführen können, und im Sommer hat es auch beim Auftraggeber wunderbar funktioniert. Nachdem es bei ihm irgendwann Probleme gegeben hat, habe ich dessen FTP Zugang bekommen und von zuhause auf seinem Server getestet. Funktioniert alles einwandfrei.

Mein Programm schreibt dabei ein Protokoll. Auf meinem Rechner:

lese C:\Users\gw\Documents\Visual Studio 2010\Projects\SL_PtCalculator\SL_PtCalculator.Web\ClientBin\SL_PtCalculator.xap
schreibe ftp://ftp.xyz.de/ClientBin/SL_PtCalculator.xap
226-File successfully transferred
226 7.614 seconds (measured here), 119.48 Kbytes per second

Auf dem Rechner des Auftraggebers:
lese C:\Users\username\Documents\Visual Studio 2010\Projects\SL_PtCalculator\SL_PtCalculator.Web\ClientBin\SL_PtCalculator.xap
schreibe ftp://ftp.xyz.de/ClientBin/SL_PtCalculator.xap
Der Remoteserver hat einen Fehler zurückgegeben: (553) Dateiname nicht zulässig.: ftp://ftp.xyz.de/ClientBin/SL_PtCalculator.xap

Ich benutze Windows 7 Home Premium Service Pack 1. Welches Windows 7 mein Auftraggeber benutzt, kann ich in Erfahrung bringen, wenn es relevant sein sollte.

Wenn ich mit dem Total Commander auf den FTP Server schaue, haben die Dateien das Attribut -0740. Mein FTP Zugang und Passwort ist genau das, was der Kollege beim AG auch hat.

Wie kann man diesem Problem auf die Schliche kommen?

Danke - Günther
 
Da ist ein führendes Leerzeichen

Code:
...or.Web\ ClientBin...

, welches Probleme macht. Am besten

Code:
...or.Web\ClientBin...

mal ausprobieren.
 
Nein. Das Leerzeichen ist in Wirklichkeit nicht da. Auch im Protokoll fehlt es noch. Es ist da reingerutscht, als das Protokoll aus einer Textdatei via Zwischenablage in den Editor dieses Forums kopierte wurde. Es ist darüber hinaus in beiden Protokollabschnitten identisch. Und in dem Text den ich jetzt unten sehe, während ich die Antwort eintippe, ist an der Stelle ein Zeilenumbruch. Eindeutig ein Problem mit dem Texteditor dieses Forums.

Trotzdem Danke für die Aufmerksamkeit.
 
Hier noch der C# Code, mit dem die Dateien hochgeladen werden. Insgesamt geht das über zwei verschiedene FTP Zugänge, deren Registryname mit ftpnr übergeben wird. fname ist die Quelldatei, ziel ist die Zieldatei, in diesem Fall /ClientBin/SL_PtCalculator.xap. ftp://ftp.xyz.de ist in Wirklichkeit natürlich anders, kommt aus der Registry, ist aber auf beiden Rechnern identisch.

Code:
        public void upload(string fname, string ziel, string ftpnr)
        {            
            // Get the object used to communicate with the server.
            string host = Reg.ftphost(ftpnr);
            string path = Reg.ftppath(ftpnr);
            path = "";
            string zieldatei = host + path + ziel; // +"_test";
            FtpWebRequest request;
            try
            {
                request = (FtpWebRequest)WebRequest.Create(zieldatei);
                request.Method = WebRequestMethods.Ftp.UploadFile;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message + "\n" + zieldatei);
                request = null;
            }
            // This example assumes the FTP site uses anonymous logon.
            request.Credentials = new NetworkCredential(Reg.ftpuser(ftpnr),Reg.ftppwd(ftpnr));
            
            // Copy the contents of the file to the request stream.
            Trace("lese " + fname);
            StreamReader sourceStream = new StreamReader(fname);
            string fileContents = sourceStream.ReadToEnd();
            sourceStream.Close();
            request.ContentLength = fileContents.Length;

            Trace("schreibe " + zieldatei);
           System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
            byte[] b = enc.GetBytes(fileContents);
            try
            {
            Stream requestStream = request.GetRequestStream();
            requestStream.Write( b, 0, fileContents.Length);
            requestStream.Close();

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            Trace(response.StatusDescription);
    
            response.Close();
            }
            catch(Exception e)
                {
                    MessageBox.Show(e.Message+"\n"+zieldatei);
                    Trace(e.Message + ": " + zieldatei);
                }

        }
 
Back
Top