FTP Webrequest多个文件没有会话关闭

本文关键字:会话 文件 Webrequest FTP | 更新日期: 2023-09-27 18:18:38

我需要一些帮助来修改这个方法,这样它就不会为每个上传的文件创建一个新的FTP会话。

变量为服务器(IP或主机名)字典(本地文件路径,ftp服务器路径)ex (c:/mydir/test.txt, 'incoming)PASV使用被动模式True/False和FTP本身的登录名/密码

我希望这件事能以这种方式进行。

1)连接服务器 2)对于字典中的每个文件/路径对,上传文件

3)连接服务器

是否有可能重写这个方法来完成这个?

我也知道try/catch应该更好地实现,我想有一个登录到FTP本身的try/catch块,然后为每个上传的文件一个try块,但我需要先整理方法的结构。

    protected static bool FtpStart(string server, Dictionary<string, string> FilePath, bool PASV, string login, string password)
    {
        foreach (var Current in FilePath)
        {
            try
            {
                //FileInfo for Filename passed.
                var ThisFile = new FileInfo(Current.Key);
                // Get the object used to communicate with the server.
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + server + Current.Value + ThisFile.Name);
                request.UsePassive = PASV;
                request.Method = WebRequestMethods.Ftp.UploadFile;
                // This example assumes the FTP site uses anonymous logon.
                request.Credentials = new NetworkCredential(login, password);
                // Copy the contents of the file to the request stream.
                StreamReader sourceStream = new StreamReader(Current.Key);
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                response.Close();
            }
            catch (Exception Ex)
            {
                Console.WriteLine(Ex.Message);
                return false;
            }
        }
        return true;
    }

FTP Webrequest多个文件没有会话关闭

您可以使用KeepAlive请求来避免连接关闭

request.KeepAlive = true;

这将只登录第一个FTPWebRequest

创建最后一个FTPWebRequest

request.KeepAlive = false;