当前位置: 移动技术网 > IT编程>开发语言>.net > 开源.NET FTP组件edtFTPnet 用法

开源.NET FTP组件edtFTPnet 用法

2018年09月13日  | 移动技术网IT编程  | 我要评论

拷问者里克拉夫,炙恋冰山首富,霍州一中

目前最新版本为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");  

    }  

}  

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网