FTP文件传输C#

时间:2017-06-21 07:05:52

标签: c# ftp

我需要将FTP上的文件从一台服务器传输到另一台服务器。我使用了以下代码。

在许多文件中,这只是部分传输一个文件。对于前者我有一个56KB的源文件。运行以下代码后,源文件减少到0kb并将0KB文件传输到目标而不是56 KB文件大小。

我构建了代码以将所有文件从源传输到目标。但是,如上所述,在传输单个0KB文件后,它没有进一步发展。

请帮帮我。

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;


                }


            }

在许多文件中,这只是部分传输一个文件。对于前者我有一个56KB的源文件。运行以下代码后,源文件减少到0kb并将0KB文件传输到目标而不是56 KB文件大小。

我构建了代码以将所有文件从源传输到目标。但是,如上所述,在传输单个0KB文件后,它没有进一步发展。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

现在我不明白为什么你的代码会发送任何文件。

您的代码:

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);

你正在创建一个新的流,然后从ftp服务器读取它...

如果您要发送文件,则不会是FileMode.Create,因为它会创建一个新文件,但FileMode.Open。​​

你肯定会从LOCAL_FileStream中读取并写入FTP_STream ....