Laden...

Ftp Zugriff .NET 2.0

Erstellt von Marcel vor 17 Jahren Letzter Beitrag vor 17 Jahren 6.508 Views
M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 17 Jahren
Ftp Zugriff .NET 2.0

Hallo,

ich möchte einen Zugriff auf einen
FTP Server programmieren. Ich habe leider
keine Erfahrung mit den neuen Klassen FtpWebRequest
und FtpWebResponse. Folgenden Code(ein Ausschnitt) habe
ich mir bereits zusammengeschrieben:

        
        private string error = string.Empty;
        private FtpWebRequest request;
               
        
        private const string NO_ERROR = "No Error Message Available";

        /*
         * Constructor
         * 
         * Non accessable Contructor.
         * Use Ftp(string pUri) instead.
         */
        private Ftp()
        {
        }

        /*
         * Constructor
         * 
         * pUri:        The URI for the destinated FTP Server.
         *              Example: "ftp://domain.de/folder" 
         */
        public Ftp(string pUri)
        {
            this.request    = (FtpWebRequest) WebRequest.Create(pUri); 
            this.error      = NO_ERROR;
        }

        /*
         * Opens the connection to the destination.
         * 
         * pUser:       Username
         * pPass:       Password
         * 
         * If connection was successfull, the return value is true.
         */
        public bool open(string pUser, string pPass)
        {            
            request.Credentials = new NetworkCredential(pUser, pPass);
            request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;             
            
            try
            {
               FtpWebResponse response = (FtpWebResponse)request.GetResponse();
               MessageBox.Show("OK");
               return true;
            }
            catch (Exception ex)
            {
               this.error = ex.Message;
               MessageBox.Show(this.error);               
               return false;
            }          
        }

Jetzt möchte den Zugriff auf den Ftp Servre testen..


         Ftp ftp = new Ftp("ftp://111.222.333.444/");
         ftp.open("User","pass");

Und erhalte folgende Fehlermeldung:

"Der Remoteserver hat einen Fehler zurückgegeben: (403) Unzulässig"

Was mache ich falsch. Ich habe mich an Beipielen aus den Inet gehalten,
die es eben so machen. Der Zugriff über den IE klappt mit den Zugangsdaten einwandfrei.

Ich danke für alle Hinweise die gegeben werden können.

Gruß

M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 17 Jahren

Ok, das habe ich nun selbst herausfinden können:

request.Proxy = null

führt wohl dazu, dass kein Proxy verwendet wird.
Und dann klappt es auch mit dem Nachbarn 😉

Eine andere Frage dazu habe ich auch noch:

Ist es möglich mit den .NET 2.0 Klassen Dateiattribute zu ändern?

Danke

2.921 Beiträge seit 2005
vor 17 Jahren

ja z.B.


DateTime ct = File.GetCreationTime(dllFileName); 
DateTime at = File.GetLastAccessTime(dllFileName); 
DateTime wt = File.GetLastWriteTime(dllFileName); 

oder


File.SetCreationTime(dllFileName, ct); 
File.SetLastAccessTime(dllFileName, at); 
File.SetLastWriteTime(dllFileName, wt);

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 17 Jahren

Danke für die Antwort.

Ist die von dir beschriebene Vorgenhensweise denn auf die
Dateien auf dem FTP Server anwednbar? Wenn ja: Wie macht man das?

Danke

M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 17 Jahren

Bin wieder etwas schlauer geworden:

Man kann anstatt

this.request.Method = WebRequestMethods.Ftp.ListDirectoryDetails

auch

this.request.Method = "LIST";

verwenden.
Scheinbar ist es möglich selbst FTP-Befehle als String zu definieren.
Leider klappt auch da nicht wie erwartet und in den wenigsten Fällen.

Beispielsweise klappt der Verzeichniswechsel..

"CWD Verzeichnis"

in ein Unterverzeichnis nicht. Das verstehe ich allerdings nicht.

Welche Befehle werden denn in welche Sysntax unterstüzt?

M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 17 Jahren

Bin wieder etwas schlauer geworden:

Man kann anstatt

this.request.Method = WebRequestMethods.Ftp.ListDirectoryDetails

auch

this.request.Method = "LIST";

verwenden.
Scheinbar ist es möglich selbst FTP-Befehle als String zu definieren.
Leider klappt auch da nicht wie erwartet und in den wenigsten Fällen.

Beispielsweise klappt der Verzeichniswechsel..

"CWD Verzeichnis"

in ein Unterverzeichnis nicht. Das verstehe ich allerdings nicht.

Welche Befehle werden denn in welche Syntax unterstüzt?

B
1.529 Beiträge seit 2006
vor 17 Jahren

Zitat MSDN-Lib zu FtpWebRequest.Method:

You can set Method to any command recognized by the server and use the FtpWebRequest object to send the command. This works as expected only if the command does not require you to send data and the server does not send data in response to the request.

Das Problem bei dieser Klasse ist, dass sie nicht zum Arbeiten auf einem FTP-Server gedacht ist, sondern nur zum schnellen Hoch- und Runterladen von Dateien.
Wenn du mehr Komfort möchtest, musst du das FTP selbst implementieren.

M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 17 Jahren

Oje, das wird ja immer schlimmer bibber

Ich hab zudem auch noch ein anderes Problem.
Wenn ich das Directory auslese, dann bekomme ich aj nur
einen Stream aus dem ich wieder die Strings erzeugen kann..


StreamReader reader = new StreamReader(response.GetResponseStream());                
string line = string.Empty;
do
{
    line = reader.ReadLine();                        
    System.Diagnostics.Debug.WriteLine(line);
}
 while (line != null);

Für jede Datei und hejdes Verzeichnis habe ich also nun einen String,
der bei mir eine solche Struktur hat:

-rw-rw-rw- 1 user group 38793472 Mar 5 13:09 Backup_050307.zip

Den muss ich ja jetzt zerlegen um an die Einzelnen Informationen zu kommen.
Hat da jemand einen link oder Codesnippet für mich?
Ist das wirklich die einzige, zudem sehr unkomfortable, Vorgehensweise die Datei und Verzeichnisstruktur auszulesen?
Und kann ich mich auf diese eine Strukur verlassen oder ist das auch wieder von Server zu Server unterschiedlich?

Danke nochmals

M
Marcel Themenstarter:in
210 Beiträge seit 2005
vor 17 Jahren

Ich geh mal davon aus, das hier niemand eine Antwort kennt,
es also keine besseren Möglichkeiten seitens .NET 20 gibt 😦

B
1.529 Beiträge seit 2006
vor 17 Jahren

Das Problem bei dieser Klasse ist, dass sie nicht zum Arbeiten auf einem FTP-Server gedacht ist, sondern nur zum schnellen Hoch- und Runterladen von Dateien.
Wenn du mehr Komfort möchtest, musst du das FTP selbst implementieren.

oder dich nach einer alternativen Klasse umschauen.

S
18 Beiträge seit 2006
vor 17 Jahren

Hi,
ich hätte auch zwei kleine Fragen zu dieser Klasse, wollte aber nicht extra ein neues Thema dafür aufmachen.

  1. Wie wechsel ich ein Verzeichnis?
  2. Wi lade ich eine Datei aus einem Verzeichnis runter?

Danke 😁