2

我需要一些帮助来修改这个方法,这样它就不会为每个上传的文件创建一个新的 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;
    }
4

1 回答 1

0

您可以 KeepAlive 您的请求以避免连接关闭

request.KeepAlive = true;

这将使登录只有第一个FTPWebRequest

然后当你创建最后一个FTPWebRequest

request.KeepAlive = false;

完成后它将关闭连接。

于 2013-12-02T10:59:31.627 回答