C# 在c中将多个文件上载到FTP#

C# 在c中将多个文件上载到FTP#,c#,ftp,C#,Ftp,我使用下面的方法将文件从本地服务器上传到FTP服务器,在这里我创建了一个新的连接并启动了一个新的会话,每个文件都上传并关闭。如何在c#中的单个启动会话中实现这一点 这是我的密码 public bool UploadTempFilesToFTP() { string[] fileList; try { ConfiguredValues conObj = new ConfiguredValues();

我使用下面的方法将文件从本地服务器上传到FTP服务器,在这里我创建了一个新的连接并启动了一个新的会话,每个文件都上传并关闭。如何在c#中的单个启动会话中实现这一点

这是我的密码

public bool UploadTempFilesToFTP()
    {
        string[] fileList;
        try
        {
            ConfiguredValues conObj = new ConfiguredValues();
            conObj.PickTheValuesFromConfigFile();
            fileList = Directory.GetFiles(conObj.tempPath);
            foreach (string FileName in fileList)
            {
                FtpWebRequest upldrequest = (FtpWebRequest)FtpWebRequest.Create(conObj.tempOutboundURL + FileName);


                upldrequest.UseBinary = true;
                upldrequest.KeepAlive = false;
                upldrequest.Timeout = -1;
                upldrequest.UsePassive = true;

                upldrequest.Credentials = new NetworkCredential(conObj.user, conObj.pass);

                upldrequest.Method = WebRequestMethods.Ftp.UploadFile;

                string destinationAddress = conObj.tempPath;

                FileStream fs = File.OpenRead(destinationAddress + FileName);
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
                fs.Close();
                Stream requestStr = upldrequest.GetRequestStream();
                requestStr.Write(buffer, 0, buffer.Length);
                requestStr.Close();
                requestStr.Flush();
                FtpWebResponse response = (FtpWebResponse)upldrequest.GetResponse();
                response.Close();
                File.Delete(destinationAddress + FileName);
            }
            Console.WriteLine("Uploaded Successfully to Temp folder");
            return true;
        }
        catch (Exception ex)
        {
            Console.WriteLine("Upload failed. {0}", ex.Message);
            return false;
        }

    } 

ftp协议旨在根据请求工作

您可以使用一个方法启动一个请求(在您的例子中是UploadFile)

您唯一能做的就是保留您的请求以避免连接关闭

upldrequest.KeepAlive = true;
在您创建的每个请求上,最后一个请求除外。这将使登录仅成为第一个
FTPWebRequest

然后,当您创建最后一个
FTPWebRequest
时,设置

upldrequest.KeepAlive = false;

完成后,它将关闭连接。

我回答了一个老问题,这很奇怪,但我几乎尝试了所有方法将多个文件上传到ftp,但运气不佳,而解决方案非常简单有效,使用循环-foreach为我解决了这个问题我使用下面的函数在一个简单的步骤中上传文件

public void Uploadbulkftpfiles(string[] list)
    {
        bool ife;// is folder exists
        try
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftpsite.com/folder");
            request.Credentials = new NetworkCredential("Username", "Password");
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            ife = true;
        }
        catch (Exception)
        {

            ife = false;
        }

        /////////////////////////////////////////////begin of upload process
        
        if (ife)//the folder is already exists
        {
            foreach (var str in list)
            {
                try
                {
                    FtpWebRequest requestUP2 = (FtpWebRequest)WebRequest.Create("ftp://ftpsite.com/folder" + str);
                    requestUP2.Credentials = new NetworkCredential("UserName", "Password");
                    requestUP2.Method = WebRequestMethods.Ftp.UploadFile;
                    requestUP2.KeepAlive = false;
                    requestUP2.UsePassive = true;
                    using (Stream fileStream = File.OpenRead("ftp://ftpsite.com/folder" + str))
                    using (Stream ftpStream = requestUP2.GetRequestStream())
                    {
                        fileStream.CopyTo(ftpStream);
                    }
                }
                catch (Exception ex1)
                {
                    
                    MessageBox.Show(ex1.Message);
                }
                
            }
        }
        else if (!ife)
        {
            //CREATE THE FOLDER
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp:ftpsite/folder");
                request.Credentials = new NetworkCredential("UserName", "Password");
                request.Method = WebRequestMethods.Ftp.MakeDirectory;
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            }
            catch (Exception excr) { MessageBox.Show(excr.Message); }
            
            

            //UPLOAD THE FILES
            foreach (var str in list)
            {
                try
                {
                    FtpWebRequest requestUP2 = (FtpWebRequest)WebRequest.Create("ftp://ftpsite.com/folder" + str);
                    requestUP2.Credentials = new NetworkCredential("UserName", "Password");
                    requestUP2.Method = WebRequestMethods.Ftp.UploadFile;
                    requestUP2.KeepAlive = false;
                    requestUP2.UsePassive = true;
                    using (Stream fileStream = File.OpenRead("ftp://ftpsite.com/folder" + str))
                    using (Stream ftpStream = requestUP2.GetRequestStream())
                    {
                        fileStream.CopyTo(ftpStream);
                    }
                }
                catch (Exception ex1)
                {
                    
                    MessageBox.Show(ex1.Message);
                }
                
            }
        }
    }

会话的含义是什么?FTP连接打开和关闭之间的时间。请查找执行此任务的第三方FTP客户端。@user3028959如果您没有打开连接,则您正在执行请求。这就是它的工作原理。1请求1文件好吧,随它去吧。如何在一个请求中上载多个文件?“ftp协议旨在根据请求工作。”,您有相关的来源吗?如果我使用交互式FTP客户端,我会登录一次,并处理该登录中的所有连接。@BartFriederichs你误解了我的意思:我不是说无状态