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

时间:2013-06-17 12:42:55

标签: c# ftp try-catch ftpwebrequest

我需要一些帮助来重新设计此方法,使其不会为每个上传的文件创建新的FTP会话。

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

我希望这能以这种方式运作。

1)连接到服务器

2)对于字典中的每个文件/路径对,上传文件

3)断开与服务器的连接

是否可以重写此方法来实现这一目标?

另外我知道try / catch应该更好地实现,我想有一个try / catch块用于登录到FTP本身,然后一个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;
    }

1 个答案:

答案 0 :(得分:0)

您可以保留请求以避免连接关闭

request.KeepAlive = true;

这将只登录第一个FTPWebRequest

然后当您创建最后一个FTPWebRequest

request.KeepAlive = false;

并在完成后关闭连接。