Announcement

Collapse
No announcement yet.

VB.Net und FTP

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VB.Net und FTP

    Moin !

    Ich versuche mich grade in die Tiefen von FTP + VB.Net vorzuarbeiten. Bin aber in VB.Net der totale Noob!!

    Folgendes versuche ich zu erreichen:
    1. Am Host anmelden
    2. ein Verzeichnis auslesen
    3. alle gefundenen (und nur die !) downloaden (alles downloaden geht nicht!!!)
    4. 5 Minuten warten
    5. wieder von vorn

    Soweit so gut. Hier die bisherigen Zeilen in Kurzform:
    [highlight=vbnet]
    Dim ftp_anfrage As FtpWebRequest = FtpWebRequest.Create("host")
    ftp_anfrage.Credentials = New NetworkCredential("user","pass")
    ftp_anfrage.Method = WebRequestMethods.Ftp.ListDirectory
    Dim ftp_antwort As FtpWebResponse = ftp_anfrage.GetResponse()
    [/highlight]

    der eintreffende Stream wird eingelesen...

    Aber wie geht es jetzt weiter? Ich müsste ja jetzt wie folgt weitermachen um
    den download zu starten :
    [highlight=vbnet]
    Dim ftp_anfrage as FtpWebRequest = FtpWebRequest.Create("host" & "file")
    (wobei "file" die jeweils nächste Datei des obigen Streams ist)
    ftp_anfrage.Credentials = New .........
    ftp_anfrage.Method = WebRequestMethods.Ftp.DownloadFile
    Dim ftp_antwort As FtpWebResponse = ftp_anfrage.GetResponse()
    [/highlight]

    der eintreffende Stream wird downgeloaded......
    die Datei wird auf dem Host gelöscht.....
    nächste Datei.....

    Würde das nicht zu einem dauernden Anmelden und Abmelden auf dem Host führen?
    Das sind nicht nur en paar Dateien zum Download, da gehts schon immer um einen Packen
    von ca. 30-50 Stück. Das kann doch nicht gut gehen.

    Verstehe ich da etwas vollkommen falsch?
    Die einzelnen Schritte Lesen/Download/Löschen hab ich hingekommen, nur das Kombinieren will mir nicht so ganz einleuchten.

    Ich hoffe, dass das einigermaßen verständlich rüberkommt.
    Bin für jede Hilfe extrem dankbar !
    Zuletzt editiert von gfoidl; 02.11.2009, 15:56. Reason: Code-Formatierung. Das nächste Mal bitte selbst so wie beschrieben.

  • #2
    der eintreffende Stream wird eingelesen...
    Aber wie geht es jetzt weiter?
    Weiter muss man aus dem Stream jede Zeile auslesen und in ein Liste von String schreiben

    [Highlight=c#]
    public List<string> GetFilesFromFtpServer()
    {
    List<string> fileList = null;
    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(ftpUri);
    request.Method = WebRequestMethods.Ftp.ListDirectory;
    request.Credentials = new NetworkCredential(User, Pass);
    request.UsePassive = false;
    //request.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    Stream responseStream = null;
    StreamReader readStream = null;
    try
    {
    string kl;
    responseStream = response.GetResponseStream();

    readStream = new StreamReader(responseStream, System.Text.Encoding.Default);
    //readStream2 = new StreamReader(
    if (readStream != null)
    {
    string line;
    fileList = new List<string>();
    do
    {
    line = readStream.ReadLine();


    if (line != null)
    fileList.Add(line);
    } while (line != null);
    }
    }
    finally
    {
    if (readStream != null)
    {
    readStream.Close();
    }
    if (response != null)
    {
    response.Close();
    }
    }
    return fileList;
    }
    [/Highlight]

    Dann einfach dürch die Liste navigieren (dass sind die Dateinamen) und die Dateien herunterladen


    Code:
    for each String sFileName in Liststring
    {
    Download(sPath,sFileName);
    }
    [highlight=c#]
    private void Download(string filePath, string fileName)
    {
    FtpWebRequest reqFTP;
    try
    {

    FileStream outputStream = new FileStream(filePath +
    "\\" + fileName, FileMode.Create);

    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" +

    ftpServerIP + "/" + fileName));
    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential(ftpUserID,
    ftpPassword);
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    Stream ftpStream = response.GetResponseStream();
    long cl = response.ContentLength;
    int bufferSize = 2048;
    int readCount;
    byte[] buffer = new byte;

    readCount = ftpStream.Read(buffer, 0, bufferSize);
    while (readCount > 0)
    {
    outputStream.Write(buffer, 0, readCount);
    readCount = ftpStream.Read(buffer, 0, bufferSize);
    }

    ftpStream.Close();
    outputStream.Close();
    response.Close();
    }
    catch (Exception ex)
    {
    // BEarbeitung
    }
    }
    [/highlight]

    Die Beispiele sind auf c#, können aber auf vb übersetzt werden
    Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

    Comment


    • #3
      Danke Vadym!

      Ok, verstanden.

      Die Frage bleibt: Wird der Host nicht mit Anmelden/Abmelden zugespammt?
      Wir nehmen mal an, es sind auf dem Host 30 Dateien vorhanden und ich arbeite das Downloaden nach dem Einlesen des Directory 30x ab, dann melde ich mich doch auch 30x an/ab. Oder habe ich da wieder ein Verständnisproblem.

      Bei FTP war für mich immer der Ablauf :
      - Melde dich an
      - mach was immer zu tun ist
      - Melde dich ab


      Ich hab mir mal lokal auf meinem PC Filezilla installiert um zu sehen wann tatsächlich die Anmeldung beim Host passiert, nämlich bei FtpResponse.

      Grüsse

      Comment


      • #4
        Originally posted by Logi View Post
        dann melde ich mich doch auch 30x an/ab.
        Nö.
        [highlight=c#]
        FtpWebRequest.KeepAlive = True
        [/highlight]
        Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

        Comment


        • #5
          Danke!

          Nu hat's geklingelt. Ne is klar!

          Comment

          Working...
          X