我需要一些帮助来重新设计此方法,使其不会为每个上传的文件创建新的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;
}
答案 0 :(得分:0)
您可以保留请求以避免连接关闭
request.KeepAlive = true;
这将只登录第一个FTPWebRequest
。
然后当您创建最后一个FTPWebRequest
request.KeepAlive = false;
并在完成后关闭连接。