2017-06-21 2 views
1

Ich muss Dateien auf FTP von einem Server auf andere übertragen. Ich habe den folgenden Code verwendet.FTP-Dateiübertragung C#

Von vielen Dateien wird nur eine Datei teilweise übertragen. Für Beispiel Ich habe eine Quelldatei von 56KB. Nach dem Ausführen des folgenden Codes wird die Quelldatei auf 0 KB reduziert und eine 0 KB-Datei wurde anstelle von 56 KB an das Ziel übertragen.

Ich habe Code erstellt, um alle Dateien von der Quelle zum Ziel zu übertragen. Aber es geht nicht weiter nach dem Übertragen einer einzelnen 0KB-Datei wie oben.

Bitte helfen Sie mir.

static void Main(string[] args) 

    { 


    string DISCH_DEST = System.Configuration.ConfigurationManager.AppSettings["DISCH_DEST"]; //Contains the source folder in source server 
    string FTP_DISCH = System.Configuration.ConfigurationManager.AppSettings["FTP_DISCH"]; // FTP path (ftp://***********/) 
    string USERNAME = System.Configuration.ConfigurationManager.AppSettings["USERNAME"]; 
    string PASSWORD = System.Configuration.ConfigurationManager.AppSettings["PASSWORD"]; 



    DirectoryInfo DISCH_Directory = new DirectoryInfo(DISCH_DEST); 

    FileInfo[] DISCH_Files = DISCH_Directory.GetFiles("*.*"); 

    foreach (var f in DISCH_Files) //FETCHING FILES FROM THE BULK FOLDER (IN) 

       { 


        string FN = Path.GetFileName(f.FullName); 
        int bufferSize = 1024; 

        FtpWebRequest REQ = (FtpWebRequest)WebRequest.Create(new Uri(String.Format("{0}/{1}",FTP_DISCH,FN))); 
        REQ.Credentials = new NetworkCredential(USERNAME, PASSWORD); 

        REQ.Method = WebRequestMethods.Ftp.UploadFile;      
        Stream FTP_Stream = REQ.GetRequestStream(); 

        FileStream LOCAL_FileStream = new FileStream(f.FullName, FileMode.Create); 
        byte[] bytebuffer = new byte[bufferSize]; 
        int bytesSent = FTP_Stream.Read(bytebuffer, 0, bufferSize); 

        try 
        { 
         while (bytesSent != 0) 
         { 
          LOCAL_FileStream.Write(bytebuffer, 0, bytesSent); 
          bytesSent = FTP_Stream.Read(bytebuffer, 0, bytesSent); 

         } 

        } 

        catch (Exception ex) { Console.WriteLine(ex.ToString()); } 

        LOCAL_FileStream.Close(); 
        FTP_Stream.Close(); 
        REQ = null; 


       } 


      } 

Aus vielen Dateien wird nur eine Datei teilweise übertragen. Für Beispiel Ich habe eine Quelldatei von 56KB. Nach dem Ausführen des folgenden Codes wird die Quelldatei auf 0 KB reduziert und eine 0 KB-Datei wurde anstelle von 56 KB an das Ziel übertragen.

Ich habe Code erstellt, um alle Dateien von der Quelle zum Ziel zu übertragen. Aber es geht nicht weiter nach dem Übertragen einer einzelnen 0KB-Datei wie oben.

Bitte helfen Sie mir.

+0

Mögliche Duplikat [Upload und Download einer Binärdatei zum/vom FTP-Server in C#/NET.] (Https schreiben: // Stackoverflow. com/fragen/44606028/upload-and-download-a-binäre-Datei-von-FTP-Server-in-c-net) –

Antwort

1

Im Moment sehe ich nicht, warum Ihr Code irgendwelche Dateien senden würde.

Ihr Code:

Stream FTP_Stream = REQ.GetRequestStream(); 

FileStream LOCAL_FileStream = new FileStream(f.FullName, FileMode.Create); 
byte[] bytebuffer = new byte[bufferSize]; 
int bytesSent = FTP_Stream.Read(bytebuffer, 0, bufferSize); 

Sie einen neuen Stream zu machen, und dann von dem FTP-Server zu lesen in sie zu setzen ...

Wenn Sie eine Datei zu senden waren es Filemode wouldnt .Create, wie das eine neue Datei erstellt, aber FileMode.Open.

Sie würde auch sicherlich von LOCAL_FileStream lesen und zu ftp_stream ....