拷问者里克拉夫,炙恋冰山首富,霍州一中
目前最新版本为2.2.3,下载后在bin目录中找到edtftpnet.dll,在项目中添加引用。下面为一些用法:
1、ftp服务器根目录为web,在它下面创建如下图示的目录和上传文件
ftpconnection.commandencoding = encoding.getencoding("gbk") 指定gbk编码以支持中文文件名
ftpconnection.createdirectory() 创建指定目录
ftpconnection.changeworkingdirectory() 切换到指定目录
ftpconnection.uploadfile() 上传文件
web
|-----l11
|-----l21
|-----l31
|-----31.htm
|-----21.htm
|-----l22
|-----11.htm
|-----目录.txt
[csharp]
private const string ftpserverip = "xx.xx.xx.xx";
private const string ftpremotepath = "web";
private const string ftpuserid = "user";
private const string ftppassword = "123";
private void btncreateandupload_click(object sender, eventargs e)
{
using (var conn = new ftpconnection
{
serveraddress = ftpserverip,
serverdirectory = ftpremotepath,
username = ftpuserid,
password = ftppassword,
commandencoding = encoding.getencoding("gbk")
})
{
conn.connect();
//创建目录l11
conn.createdirectory("l11");
//============切换当前工作目录到l11============
conn.changeworkingdirectory("l11");
//上行代码也可以用conn.serverdirectory = "l11";
//上传"文档.txt"
conn.uploadfile("文档.txt", "文档.txt");
//创建子目录l21,l22
conn.createdirectory("l21");
conn.createdirectory("l22");
//在当前工作目录l11上传文件"l11.htm"
conn.uploadfile("11.htm", "11.htm");
//============切换当前工作目录到l21============
conn.changeworkingdirectory("l21");
//上传文件21.htm
conn.uploadfile("21.htm", "21.htm");
//创建目录l31
conn.createdirectory("l31");
//============切换当前工作目录到l31============
conn.changeworkingdirectory("l31");
//上传文件31.htm
conn.uploadfile("31.htm", "31.htm");
}
}
2、获取文件信息
ftpconnection.getfileinfos() 获取文件和目录详细信息,结果的一个属性dir为true表示为目录,否则为文件
[csharp]
private void btnlist_click(object sender, eventargs e)
{
using (var conn = new ftpconnection
{
serveraddress = ftpserverip,
serverdirectory = ftpremotepath,
username = ftpuserid,
password = ftppassword,
commandencoding = encoding.getencoding("gbk")
})
{
conn.connect();
//获取指定目录的所有子目录和文件信息
conn.changeworkingdirectory("l11/l21");
var files1 = conn.getfileinfos();
showfileinfos(files1);
/*结果如下:
file, /web/l11/l21/21.htm, 21.htm, 11.2kb, 2013-9-26 14:51:00
dir, /web/l11/l21/l31, l31, 0kb, 2013-9-26 14:51:00
*/
////返回上级目录,例子中为web/l11
conn.changeworkingdirectoryup();
var files2 = conn.getfileinfosrecursive();
showfileinfos(files2);
/*结果如下:
file, /web/l11/11.htm, 11.htm, 59.4kb, 2013-9-26 14:51:00
dir, /web/l11/l21, l21, 0kb, 2013-9-26 14:51:00
dir, /web/l11/l22, l22, 0kb, 2013-9-26 14:51:00
file, /web/l11/文档.txt, 文档.txt, 40.8kb, 2013-9-26 14:51:00
file, /web/l11/l21/21.htm, 21.htm, 11.2kb, 2013-9-26 14:51:00
dir, /web/l11/l21/l31, l31, 0kb, 2013-9-26 14:51:00
file, /web/l11/l21/l31/31.htm, 31.htm, 5.6kb, 2013-9-26 14:51:00
*/
}
}
void showfileinfos(ftpfile[] files)
{
foreach (var file in files)
{
string info = string.format("{0}, {1}, {2}, {3}kb, {4}",
file.dir ? "dir" : "file", file.path, file.name, math.round(file.size / 1024.0, 1), file.lastmodified);
richtextbox1.appendtext(info + "\r\n");
}
richtextbox1.appendtext("\r\n");
}
其中递归获取指定目录的所有子目录和文件信息的扩展方法getfileinfosrecursive如下:
[csharp]
public static class ftpclientextensions
{
/// <summary>
/// 递归获取目录的所有子目录和文件信息
/// </summary>
public static ftpfile[] getfileinfosrecursive(this ftpconnection conn)
{
var resultlist = new list<ftpfile>();
var fileinfos = conn.getfileinfos();
resultlist.addrange(fileinfos);
foreach (var fileinfo in fileinfos)
{
if (fileinfo.dir)
{
conn.serverdirectory = fileinfo.path;
resultlist.addrange(conn.getfileinfosrecursive());
}
}
return resultlist.toarray();
}
/// <summary>
/// 递归删除目录(包括所有子目录和文件信息)
/// </summary>
public static void deletedirectoryrecursive(this ftpconnection conn, string directoryname)
{
conn.changeworkingdirectory(directoryname);
var fileinfos = conn.getfileinfos();
foreach (var fileinfo in fileinfos)
{
if (fileinfo.dir)
conn.deletedirectoryrecursive(fileinfo.name);
else
conn.deletefile(fileinfo.name);
}
conn.changeworkingdirectoryup();
conn.deletedirectory(directoryname);
}
}
3、删除目录及所有子目录和文件
ftpconnection.deletedirectory()当删除的目录不为空时,会出错,需递归删除,
递归删除目录扩展方法deletedirectoryrecursive见上面类ftpclientextensions
[csharp]
private void btndelete_click(object sender, eventargs e)
{
using (var conn = new ftpconnection
{
serveraddress = ftpserverip,
serverdirectory = ftpremotepath,
username = ftpuserid,
password = ftppassword,
commandencoding = encoding.getencoding("gbk")
})
{
conn.connect();
//递归删除目录及所有子目录和文件
conn.deletedirectoryrecursive("l11");
//如果删除单个文件,路径为当前目录的相对路径
//conn.deletefile("l11/11.htm");
}
}
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论