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