public FtpImpl(FtpOption ftpOption)
{
_ftpOption = ftpOption;
}
/// <summary>
/// 检查文件是否存在
/// </summary>
/// <param name="ftpPath"></param>
/// <param name="ftpName"></param>
/// <returns></returns>
public bool fileCheckExist()
{
bool success = false;
FtpWebRequest ftpWebRequest = null;
WebResponse webResponse = null;
StreamReader reader = null;
try
{
string url = _ftpOption.FtpPath;
ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
ftpWebRequest.Credentials = new NetworkCredential(_ftpOption.FtpUser, _ftpOption.FtpPassword);
ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpWebRequest.KeepAlive = false;
webResponse = ftpWebRequest.GetResponse();
reader = new StreamReader(webResponse.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
if (line == _ftpOption.FtpCheckFile)
{
success = true;
break;
}
line = reader.ReadLine();
}
}
catch (Exception)
{
success = false;
}
finally
{
if (reader != null)
{
reader.Close();
}
if (webResponse != null)
{
webResponse.Close();
}
}
return success;
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="localFile1">本地文件路径及文件名</param>
/// <param name="ftpFileName">ftp文件路径及文件名(文件名可重命名)</param>
/// <returns>返回bool值</returns>
public bool fileUpload(string localFile)
{
FileInfo localFileInfo = new FileInfo(localFile);
bool success = false;
FtpWebRequest ftpWebRequest = null;
FileStream localFileStream = null;
Stream requestStream = null;
try
{
string uri = _ftpOption.FtpPath+"/"+localFile;
ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(_ftpOption.FtpUser, _ftpOption.FtpPassword);
ftpWebRequest.UseBinary = true;//指定数据传输类型为二进制
ftpWebRequest.KeepAlive = false;//成功执行一个命令后连接被关闭
ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;// 指定执行什么命令
ftpWebRequest.ContentLength = localFileInfo.Length;//上传文件时通知服务器文件的大小
int buffLength = 20480;// 缓冲大小设置为20kb
byte[] buff = new byte[buffLength];
int contentLen;
localFileStream = localFileInfo.OpenRead();//打开一个文件流去读上传的文件
requestStream = ftpWebRequest.GetRequestStream();//把上传的文件写入流
contentLen = localFileStream.Read(buff, 0, buffLength);//每次读文件流的2kb
while (contentLen != 0)// 流内容没有结束
{
// 把内容从file stream 写入 upload stream
requestStream.Write(buff, 0, contentLen);
contentLen = localFileStream.Read(buff, 0, buffLength);
}
success = true;
}
catch (Exception)
{
success = false;
}
finally
{
if (requestStream != null)
{
requestStream.Close();
}
if (localFileStream != null)
{
localFileStream.Close();
}
}
return success;
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="ftpPath">ftp文件路径(不包含文件名)</param>
/// <param name="ftpName">文件名</param>
/// <returns>返回值</returns>
public bool fileDelete()
{
bool success = false;
FtpWebRequest ftpWebRequest = null;
FtpWebResponse ftpWebResponse = null;
Stream ftpResponseStream = null;
StreamReader streamReader = null;
try
{
string uri = _ftpOption.FtpPath + '/' + _ftpOption.FtpCheckFile;
ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(_ftpOption.FtpUser, _ftpOption.FtpPassword);
ftpWebRequest.KeepAlive = false;
ftpWebRequest.Method = WebRequestMethods.Ftp.DeleteFile;
ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
long size = ftpWebResponse.ContentLength;
ftpResponseStream = ftpWebResponse.GetResponseStream();
streamReader = new StreamReader(ftpResponseStream);
string result = String.Empty;
result = streamReader.ReadToEnd();
success = true;
}
catch (Exception)
{
success = false;
}
finally
{
if (streamReader != null)
{
streamReader.Close();
}
if (ftpResponseStream != null)
{
ftpResponseStream.Close();
}
if (ftpWebResponse != null)
{
ftpWebResponse.Close();
}
}
return success;
}
/// <summary>
/// 删除文件夹(只针对空文件夹)
/// </summary>
/// <param name="folderName"></param>
public bool RemoveDirectory()
{
bool success = false;
FtpWebRequest ftpWebRequest = null;
FtpWebResponse ftpWebResponse = null;
Stream ftpResponseStream = null;
StreamReader streamReader = null;
try
{
string uri = _ftpOption.FtpPath + '/' + _ftpOption.FtpCheckFile;
ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(_ftpOption.FtpUser, _ftpOption.FtpPassword);
ftpWebRequest.KeepAlive = false;
ftpWebRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
string result = String.Empty;
ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
long size = ftpWebResponse.ContentLength;
ftpResponseStream = ftpWebResponse.GetResponseStream();
streamReader = new StreamReader(ftpResponseStream);
result = streamReader.ReadToEnd();
success = true;
}
catch (Exception ex)
{
success = false;
}
finally
{
if (streamReader != null)
{
streamReader.Close();
}
if (ftpResponseStream != null)
{
ftpResponseStream.Close();
}
if (ftpWebResponse != null)
{
ftpWebResponse.Close();
}
}
return success;
}