当前位置: 移动技术网 > IT编程>开发语言>c# > C# winfrom 模拟ftp文件管理实现代码

C# winfrom 模拟ftp文件管理实现代码

2019年07月18日  | 移动技术网IT编程  | 我要评论
复制代码 代码如下:using system; using system.collections.generic; using system.text; using sys

复制代码 代码如下:

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)//连接ftp
        {
            // 根据uri创建ftpwebrequest对象
            reqftp = (ftpwebrequest)ftpwebrequest.create(new uri(path));
            // 指定数据传输类型
            reqftp.usebinary = true;
            // ftp用户名和密码
            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)//上面的代码示例了如何从ftp服务器上获得文件列表
        {
            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();
                }
                // to remove the trailing '\n'
                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)//上面的代码示例了如何从ftp服务器上获得文件列表
        {
            return getfilelist("ftp://" + ftpserverip + "/" + path, webrequestmethods.ftp.listdirectory);

        }

 

        public string[] getfilelist()//上面的代码示例了如何从ftp服务器上获得文件列表
        {
            return getfilelist("ftp://" + ftpserverip + "/", webrequestmethods.ftp.listdirectory);
        }

        public void upload(string filename) //上面的代码实现了从ftp服务器上载文件的功能
        {
            fileinfo fileinf = new fileinfo(filename);
            string uri = "ftp://" + ftpserverip + "/" + fileinf.name;
            connect(uri);//连接      
            // 默认为true,连接不会被关闭
            // 在一个命令之后被执行
            reqftp.keepalive = false;
            // 指定执行什么命令
            reqftp.method = webrequestmethods.ftp.uploadfile;
            // 上传文件时通知服务器文件的大小
            reqftp.contentlength = fileinf.length;
            // 缓冲大小设置为kb 
            int bufflength = 2048;

            byte[] buff = new byte[bufflength];
            int contentlen;
            // 打开一个文件流(system.io.filestream) 去读上传的文件
            filestream fs = fileinf.openread();
            try
            {
                // 把上传的文件写入流
                stream strm = reqftp.getrequeststream();
                // 每次读文件流的kb 
                contentlen = fs.read(buff, 0, bufflength);
                // 流内容没有结束
                while (contentlen != 0)
                {
                    // 把内容从file stream 写入upload stream 
                    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)////上面的代码实现了从ftp服务器下载文件的功能
        {
            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);//连接        
                 // 默认为true,连接不会被关闭

                 // 在一个命令之后被执行

                 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();
                //stream ftpstream = response.getresponsestream();

                //ftpstream.close();
                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);
        }

    }
}

上面为类,举例证明如何代用

复制代码 代码如下:

private void button1_click(object sender, eventargs e)//文件上传
        {
            ftpupdown ftpupdown = new ftpupdown("192.168.2.130:21", "wl","123456");
            ftpupdown.upload("e:\\other.rar");  
        }
 private void button3_click(object sender, eventargs e)//修改
        {
            ftpupdown ftpupdown = new ftpupdown("192.168.2.130:21", "wl", "123456");
            ftpupdown.rename("张三", "李四");
        }
 private void button4_click(object sender, eventargs e)//删除
        {
            ftpupdown ftpupdown = new ftpupdown("192.168.2.130:21", "wl", "123456");
            ftpupdown.deldir("张三");
        }
 private void button2_click(object sender, eventargs e)//添加
        {
            ftpupdown ftpupdown = new ftpupdown("192.168.2.130:21", "wl", "123456");
            ftpupdown.makedir(this.txt_name.text);
        }

 
//获得ftp文件的文件明晰,还为处理,能够获得所有的文件名称
 ftpupdown ftpupdown = new ftpupdown("192.168.2.130", "wl", "123456");
            string[] str = ftpupdown.getfilesdetaillist();
            int i = 1;
            foreach (string item in str)
            {
                string[] name = item.split(' ');
                txt_name.text += name[name.length - 1] + ";";
                i++;
            }
            label1.text = i.tostring();

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网