在开发项目的时候,需要移动FTP上的文件。网上找到MoveTo方法,并没有实际效果。踩了坑,网上找了很久也没有效果。那是因为我们的文件来源路径和模板路径不正确,需要转为相对路径才能使用。Uri.MakeRelativeUri方法生成一个文件相对路径,代码如下:
/// <summary>
/// ftp服务器移动文件
/// </summary>
/// <param name="url">文件夹路径</param>
/// <param name="fileName">文件名称</param>
/// <param name="backupUrl">备份路径</param>
/// <param name="newFileName"></param>
public bool MoveFtpFile(string url, string fileName, string backupUrl, string newFileName)
{
//登入到ftp的账号
string ftpUserName = att.ftpUserName;
//登入到ftp的密码
string ftpUserPwd = att.ftpUserPwd;
bool success = false;
var uri = url + backupUrl;
if (!Directory.Exists(uri))
{
FtpWebRequest frequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
frequest.Credentials = new NetworkCredential(att.ftpUserName, att.ftpUserPwd);
frequest.Method = WebRequestMethods.Ftp.MakeDirectory;
try
{
FtpWebResponse response = frequest.GetResponse() as FtpWebResponse;
}
catch { }
}
//重命名或移动文件
var sourceUrl = url + "/" + fileName;//文件源路径
var destinationUrl = uri + "/" + newFileName;//目标路径,文件名:yyyyMMddHHmmss_fileName
FtpWebRequest reqFTP;
try
{
var uriSource = new Uri(sourceUrl, UriKind.Absolute);
var uriDestination = new Uri(destinationUrl, UriKind.Absolute);
Uri targetUriRelative = uriSource.MakeRelativeUri(uriDestination);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(uriSource.AbsoluteUri);
reqFTP.Method = WebRequestMethods.Ftp.Rename;
reqFTP.RenameTo = Uri.UnescapeDataString(targetUriRelative.OriginalString);
reqFTP.KeepAlive = false;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(att.ftpUserName, att.ftpUserPwd);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch (Exception ex)
{
}
return success;
}
如有问题请指出,大家共同学习。
版权声明:本文为zhangxin988原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。