c# 操作FTP文件类

c# 操作FTP文件类

        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, String directory, String newFileName)  // 上面的代码实现了从ftp服务器上载文件的功能
        {

            FileInfo fileInf =  new FileInfo(filename);

             string uri =  " ftp:// " + ftpServerIP +  " / " + directory +  " / " + newFileName;
           
             if (!DirectoryIsExist(directory))
            {
                MakeDir(directory);
            }

            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);
        }

         ///   <summary>
        
///  检测目录是否存在
        
///   </summary>
        
///   <param name="dirName"></param>
        
///   <returns> false不存在,true存在 </returns>
         public Boolean DirectoryIsExist( string dirName)        
        { 
             string[] value = GetFileList(dirName);
             if (value ==  null)
            {
                 return  false;
            }
             else
            {
                 return  true;
            }
        }

 

 

 

 

转载于:https://www.cnblogs.com/gengaixue/archive/2012/11/28/2792893.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值