using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Windows.Forms;
namespace
ConvertData
{
class
FtpUpDown
{
string ftpServerIP;
string ftpUserID;
string ftpPassword;
FtpWebRequest reqFTP;
private
void Connect(String path)
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(
new
Uri(path));
reqFTP.UseBinary = true;
reqFTP.Credentials =
new
NetworkCredential(ftpUserID, ftpPassword);
}
public
FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)
{
this.ftpServerIP = ftpServerIP;
this.ftpUserID = ftpUserID;
this.ftpPassword = ftpPassword;
}
private
string[] GetFileList(string path, string WRMethods)
{
string[] downloadFiles;
StringBuilder result =
new
StringBuilder();
try
{
Connect(path);
reqFTP.Method = WRMethods;
WebResponse response = reqFTP.GetResponse();
StreamReader reader =
new
StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);
string line = reader.ReadLine();
while
(line != null)
{
result.Append(line);
result.Append(
"\n"
);
line = reader.ReadLine();
}
result.Remove(result.ToString().LastIndexOf('\n'), 1);
reader.Close();
response.Close();
return
result.ToString().Split('\n');
}
catch
(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
downloadFiles = null;
return
downloadFiles;
}
}
public
string[] GetFileList(string path)
{
return
GetFileList(
"ftp://"
+ ftpServerIP +
"/"
+ path, WebRequestMethods.Ftp.ListDirectory);
}
public
string[] GetFileList()
{
return
GetFileList(
"ftp://"
+ ftpServerIP +
"/"
, WebRequestMethods.Ftp.ListDirectory);
}
public
void Upload(string filename)
{
FileInfo fileInf =
new
FileInfo(filename);
string uri =
"ftp://"
+ ftpServerIP +
"/"
+ fileInf.Name;
Connect(uri);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.ContentLength = fileInf.Length;
int buffLength = 2048;
byte[] buff =
new
byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
try
{
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while
(contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
strm.Close();
fs.Close();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message,
"Upload Error"
);
}
}
public
bool Download(string filePath, string fileName, out string errorinfo)
{
try
{
String onlyFileName = Path.GetFileName(fileName);
string newFileName = filePath +
"\\"
+ onlyFileName;
if
(File.Exists(newFileName))
{
errorinfo = string.Format(
"本地文件{0}已存在,无法下载"
, newFileName);
return
false;
}
string url =
"ftp://"
+ ftpServerIP +
"/"
+ fileName;
Connect(url);
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);
FileStream outputStream =
new
FileStream(newFileName, FileMode.Create);
while
(readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
errorinfo =
""
;
return
true;
}
catch
(Exception ex)
{
errorinfo = string.Format(
"因{0},无法下载"
, ex.Message);
return
false;
}
}
public
void DeleteFileName(string fileName)
{
try
{
FileInfo fileInf =
new
FileInfo(fileName);
string uri =
"ftp://"
+ ftpServerIP +
"/"
+ fileInf.Name;
Connect(uri);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message,
"删除错误"
);
}
}
public
void MakeDir(string dirName)
{
try
{
string uri =
"ftp://"
+ ftpServerIP +
"/"
+ dirName;
Connect(uri);
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public
void delDir(string dirName)
{
try
{
string uri =
"ftp://"
+ ftpServerIP +
"/"
+ dirName;
Connect(uri);
reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public
long GetFileSize(string filename)
{
long
fileSize
= 0;
try
{
FileInfo fileInf =
new
FileInfo(filename);
string uri =
"ftp://"
+ ftpServerIP +
"/"
+ fileInf.Name;
Connect(uri);
reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
fileSize
= response.ContentLength;
response.Close();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
return
fileSize
;
}
public
void Rename(string currentFilename, string newFilename)
{
try
{
FileInfo fileInf =
new
FileInfo(currentFilename);
string uri =
"ftp://"
+ ftpServerIP +
"/"
+ fileInf.Name;
Connect(uri);
reqFTP.Method = WebRequestMethods.Ftp.Rename;
reqFTP.RenameTo = newFilename;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public
string[] GetFilesDetailList()
{
return
GetFileList(
"ftp://"
+ ftpServerIP +
"/"
, WebRequestMethods.Ftp.ListDirectoryDetails);
}
public
string[] GetFilesDetailList(string path)
{
return
GetFileList(
"ftp://"
+ ftpServerIP +
"/"
+ path, WebRequestMethods.Ftp.ListDirectoryDetails);
}
}
}