Entwickler-Ecke

ASP.NET und Web - via ftp: Datei auf Unixserver "abholen" und lokal Speichern


estrella1410 - Mo 17.12.07 12:11
Titel: via ftp: Datei auf Unixserver "abholen" und lokal Speichern
Hallo..

habe folgendes Problem:

Ich möchte gerne ein Programm schreiben welches via ftp sich auf dem Server (mit Unix) anmeldet und dort eine Txt.-Datei abholt und auf meinem lokalen Rechner speichert...habe schon rumprobiert aber irgendwie kommt die nur ller an.

Hier mal mein Code


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
            string filename = "C:/SpaceUnix.txt";
            string username = "xyz";
            string password = "abc";
            string URI = "ftp://servername/Space_Unix.txt";

            NetworkCredential nc = new NetworkCredential(username, password);
            WebRequest req = WebRequest.Create(URI);
            req.Credentials = nc;
            WebResponse resp = req.GetResponse();
            using (FileStream fsb = new FileStream(filename, FileMode.CreateNew))
            {
                BinaryWriter bw = new BinaryWriter(fsb);
                Byte[] read = new Byte[1024];
                int bytes = resp.GetResponseStream().Read(read, 01024);
            }



Kann mir jemand evtl. helfen?

Gruß,

Jessy

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Moderiert von user profile iconChristian S.: Topic aus Sonstiges (C# / .NET) verschoben am Mo 17.12.2007 um 21:44


Christian S. - Mo 17.12.07 22:44

Hallo!

Du musst die entsprechende Methode setzen, indem Du den WebRequest in einen FtpWebRequest castest, der von der Create-Methode erzeugt wird, sobald eine URL übergibst, die mit "ftp://" anfängt:

Chrome-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
  var url := 'ftp://www.eine-domain.de/eineDatei.txt';
  var req := FtpWebRequest(WebRequest.Create(url));
  req.Method := WebRequestMethods.http://Ftp.DownloadFile;
  req.Credentials := new NetworkCredential(aUsername, aPassword);
  req.UseBinary := true;
    
  using resp := req.GetResponse do
    using respStream := resp.GetResponseStream do
    begin      
      var buffer := new Byte[2048];
      var count : Integer;
      using f := File.Create('e:\eineDatei.txt'do
        repeat
          count := respStream.Read(buffer, 0, buffer.Length);
          if count > 0 then
            f.Write(buffer, 0, count); 
        until count = 0;    
    end;


//edit: Fehler im Code korrigiert


estrella1410 - Do 20.12.07 12:11

vorab DANKE für die antwort

also ich habe mal versucht dein beispiel in meinen code umzusetzten aber ich komme kein stück vorran damit...habe auch ehrlich schwierigkeiten das umzusetzen in c# (sooo fit bin ich leider noch nicht da..)

kannst du mir da nochmal nen bsp viell. in c# gebn bzw. tipps welche teile bei mir fehlen/geändert werdn sollten?

Gruß

Jessy


Christian S. - Do 20.12.07 12:22

So unterschiedlich ist das doch gar nicht, in .NET sieht doch eh alles gleich aus ;-)

Mal sehen, ob ich das aus dem Kopf hinbekomme. :gruebel:



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
string url = "ftp://www.eine-domain.de/eineDatei.txt";
FtpWebRequest req = (FtpWebRequest) WebRequest.Create(url);
req.Method = WebRequestMethods.http://Ftp.DownloadFile;
req.Credentials = new NetworkCredential(aUsername, aPassword);
req.UseBinary = true;
    
using (WebResponse resp = req.GetResponse) //hier bin ich mir bei "WebResponse" nicht sicher, bitte in der Doku nachschlagen
{
  using (Stream respStream = resp.GetResponseStream)
  {   
    Byte[] buffer = new Byte[2048];
    int count;
    using (FileStream f : File.Create(@"e:\eineDatei.txt"))
    {
      do {
        count = respStream.Read(buffer, 0, buffer.Length);
        if (count > 0)
          f.Write(buffer, 0, count);
      } while (count > 0);
   }
}


estrella1410 - Do 20.12.07 12:56

habe es jetzt hinbekommen :) danke schön


dann hab ich au nur noch eine kleine frage...ist die formatierung auch möglich? (habe jez alle informationen in 2 zeilen will aber alles hübsch bündig untereinander)

bin mir grad nich sicher wie das hier geht ... also ich weis dass es in vbs sowas wie "vbCrLf" gibt und in c# auch sowas wie "/r/n"...

hmm


Christian S. - Do 20.12.07 12:59

Ich weiß nicht wirklich, wovon Du redest :gruebel:

Aber es hört sich so an, als wäre es eine neue Frage, und bei denen gilt im Forum: Neue Frage -> Neuer Thread ;-)


estrella1410 - Do 20.12.07 13:28

gut hab ich gemacht :)