public classFtpFileMetadata
{public long FileLength { get; set; }public string MD5Hash { get; set; }public DateTime LastModifyTime { get; set; }
}public classFtpHelper
{private FtpClient _client = null;private string _host = "127.0.0.1";private int _port = 21;private string _username = "Anonymous";private string _password = "";private string _workingDirectory = "";public stringWorkingDirectory
{get{return_workingDirectory;
}
}public FtpHelper(string host, int port, string username, stringpassword)
{
_host=host;
_port=port;
_username=username;
_password=password;
}public Stream GetStream(stringremotePath)
{
Open();return_client.OpenRead(remotePath);
}public void Get(string localPath, stringremotePath)
{
Open();
_client.DownloadFile(localPath, remotePath,true);
}public void Upload(Stream s, stringremotePath)
{
Open();
_client.Upload(s, remotePath, FtpExists.Overwrite,true);
}public void Upload(string localFile, stringremotePath)
{
Open();using (FileStream fileStream = newFileStream(localFile, FileMode.Open))
{
_client.Upload(fileStream, remotePath, FtpExists.Overwrite,true);
}
}public int UploadFiles(IEnumerable localFiles, stringremoteDir)
{
Open();
List files = new List();foreach (var lf inlocalFiles)
{
files.Add(newFileInfo(lf));
}int count = _client.UploadFiles(files, remoteDir, FtpExists.Overwrite, true, FtpVerify.Retry);returncount;
}public void MkDir(stringdirName)
{
Open();
_client.CreateDirectory(dirName);
}public bool FileExists(stringremotePath)
{
Open();return_client.FileExists(remotePath);
}public bool DirExists(stringremoteDir)
{
Open();return_client.DirectoryExists(remoteDir);
}public FtpListItem[] List(stringremoteDir)
{
Open();var f =_client.GetListing();
FtpListItem[] listItems=_client.GetListing(remoteDir);returnlistItems;
}public FtpFileMetadata Metadata(stringremotePath)
{
Open();long size =_client.GetFileSize(remotePath);
DateTime lastModifyTime=_client.GetModifiedTime(remotePath);return newFtpFileMetadata()
{
FileLength=size,
LastModifyTime=lastModifyTime
};
}public boolTestConnection()
{return_client.IsConnected;
}public void SetWorkingDirectory(stringremoteBaseDir)
{
Open();if (!DirExists(remoteBaseDir))
MkDir(remoteBaseDir);
_client.SetWorkingDirectory(remoteBaseDir);
_workingDirectory=remoteBaseDir;
}private voidOpen()
{if (_client == null)
{
_client= new FtpClient(_host, newSystem.Net.NetworkCredential(_username, _password));
_client.Port= 21;
_client.RetryAttempts= 3;if (!string.IsNullOrWhiteSpace(_workingDirectory))
{
_client.SetWorkingDirectory(_workingDirectory);
}
}
}
}