检查是否正常连接
public bool CheckFtp(string _ftpServerIP ,string _ftpUserID,string _ftpPassword) {
try {
FtpWebRequest ftprequest = (FtpWebRequest)WebRequest.Create(new Uri("ftp://" + _ftpServerIP + "/"));
ftprequest.Credentials = new NetworkCredential(_ftpUserID, _ftpPassword);
ftprequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftprequest.Timeout = 600000;
FtpWebResponse ftpResponse = (FtpWebResponse)ftprequest.GetResponse();
ftpResponse.Close();
return true;
} catch (Exception ex) {
return false;
}
}
上传文件
public bool Upload(string filename,string ftp, string UserName, string Password,string ftpPath )
{
try
{
bool b = CreateDir(ftp, UserName, Password, ftpPath);
FileInfo fileInf = new FileInfo(filename);
string uri = ftp + ftpPath + fileInf.Name;
FtpWebRequest reqFTP ;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential(UserName, Password);
reqFTP.KeepAlive = false;
reqFTP.Timeout = 60000;
reqFTP.ServicePoint.ConnectionLimit = 10;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = fileInf.Length;
Total = (int)fileInf.Length;
Size = 0;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while (contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
Size += contentLen;
}
strm.Close();
fs.Close();
reqFTP.Abort();
}
catch (Exception ex)
{
return false;
}
return true;
}
下载文件
public bool Download(string ftp, string UserName, string Password,string filePath, string fileName) {
FtpWebRequest reqFTP=(FtpWebRequest)WebRequest.Create(new Uri(ftp));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(UserName, Password);
try {
FileStream outputStream = new FileStream(filePath+ fileName, FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftp+ fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(_ftpUserID, _ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0) {
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
return true;
} catch (Exception ex) {
return false;
}
}
获取ftp目录下文件信息
public static Regex FtpListDirectoryDetailsRegex = new Regex(@".*(?<month>(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s*(?<day>[0-9]*)\s*(?<yearTime>([0-9]|:)*)\s*(?<fileName>.*)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
public List<FtpMsg> GetFtpMsgInfo(string ftp, string UserName, string Password,string upTime)
{
List<FtpMsg> listMsg = new List<FtpMsg>();
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(ftp));
ftpRequest.UseBinary = true;
ftpRequest.Credentials = new NetworkCredential(UserName, Password);
if (ftpRequest != null)
{
StringBuilder fileListBuilder = new StringBuilder();
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
try
{
WebResponse ftpResponse = ftpRequest.GetResponse();
StreamReader ftpFileListReader = new StreamReader(ftpResponse.GetResponseStream(), Encoding.Default);
string line = ftpFileListReader.ReadLine();
while (line != null)
{
fileListBuilder.Append(line);
fileListBuilder.Append("@");
line = ftpFileListReader.ReadLine();
}
ftpFileListReader.Close();
ftpResponse.Close();
fileListBuilder.Remove(fileListBuilder.ToString().LastIndexOf("@"), 1);
string[] fileNames = fileListBuilder.ToString().Split('@');
for (int i = 0; i < fileNames.Length; i++)
{
FtpMsg fmsg = new FtpMsg();
if (fileNames[i].Contains("rw"))
{
Match match = FtpListDirectoryDetailsRegex.Match(fileNames[i]);
string month = match.Groups["month"].Value;
string day = match.Groups["day"].Value;
string yearTime = match.Groups["yearTime"].Value;
string fileName = match.Groups["fileName"].Value;
string fmsgTime= Convert.ToDateTime(DateTime.Now.ToString("yy") + month + day ).ToString("yyyy-MM-dd")+ " "+yearTime;
fmsg.MSG_NAME = fileName;
fmsg.MSG_PATT = ftp + "/" + fileName;
fmsg.MSG_TIME =Convert.ToDateTime( fmsgTime);
listMsg.Add(fmsg);
}
}
}
catch (Exception ex)
{
throw;
}
}
return listMsg;
}
创建目录
public bool FtpMakeDir(string strPath) {
FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(strPath);
req.UseBinary = true;
req.Credentials = new NetworkCredential(_ftpUserID, _ftpPassword);
req.Method = WebRequestMethods.Ftp.MakeDirectory;
try {
FtpWebResponse response = (FtpWebResponse)req.GetResponse();
response.Close();
} catch (Exception) {
req.Abort();
return false;
}
req.Abort();
return true;
}
删除文件
public void Delete(string filePath) {
FtpWebRequest reqFTP;
try {
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(filePath));
reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(_ftpUserID, _ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
} catch (Exception ex) {
MessageBox.Show("删除FTP文件异常!" + ex.Message + "请联系信息管理部!", "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}