• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
一个具有上进心的码农
因为一篇文章中有很多是从很多篇文章中摘取的,请恕我没有一一说明摘取出处,如果没有说明,则该文章默认是摘取,如有侵犯您的权益,请与我联系,将会马上删除。
博客园    首页    新随笔    联系   管理    订阅  订阅

FTP断点续传的

Code
/*
 * 
 * 功能说明:客户端FTP的操作类
 * 
 * FTP Command:
 * 
 * 1.用户名.(USER)
 * 2.口令(PASS)
 * 3.认证(ACCT)
 * 4.改变工作目录.(CWD)
 * 5.回到上一层目录..(CDUP)
 * 6.结构加载..(SMNT)
 * 7.重新登录..(REIN)
 * 8.退出登录..(QUIT)
 * 9.数据端口..(PORT)
 * 10.被动..(PASV)
 * 11.类型..(TYPE)
 * 12.文件结构.(STRU)
 * 13.传输模式.(MODE)
 * 14.获得文件.(RETR)
 * 15.上传文件.(STOR)
 * 16.唯一保存.(STOU)
 * 17.附加..(APPE)
 * 18.分配..(ALLO)
 * 19.重新开始.(REST)
 * 20.重命名(RNFR)
 * 21.重命名为.(RNTO)
 * 22.放弃..(ABOR)
 * 23.删除..(DELE)
 * 24.删除目录.(RMD)
 * 25.创建目录.(MKD)
 * 26.打印工作目录(PWD)
 * 27.列目录(LIST)
 * 28.站点参数.(SITE)
 * 29.系统..(SYST)
 * 30.状态..(STAT)
 * 31.帮助..(HELP)
 * 32.等待..(NOOP)
 * 
*/


using System;
using System.Net;
using System.IO;
using System.Text;
using System.Collections;
using System.Net.Sockets;


 
/// <summary>
 
/// FtpUtil 的摘要说明。
 
/// </summary>
 public class FtpUtil
 {
  
private Int32  _RemotePort;
  
private String  _RemoteHost;
  
private String  _RemoteAccounts;
  
private String  _RemotePassword;
  
private Boolean  _Logined;
  
private String  _RemotePath;

  
private Socket  mClientSocket;
  
private String  mRemoteMessage;
  
private Int32  mBytes;
  
private Byte[]  mBuffer;
  
private Encoding ASCII;

  
private String  mReply;
  
private Int32  mRetValue;

  
/// <summary>
  
/// 设置缓冲块的大小
  
/// </summary>
  private static Int32 BLOCK_SIZE = 512;

  
public FtpUtil()
  {
   _RemotePort   
= 21;
   _RemoteAccounts  
= "Anonymous";
   _RemotePassword  
= "mack_zhu@hotmail.com";
   _RemotePath   
= ".";
   _Logined   
= false;

   ASCII    
= Encoding.GetEncoding("gb2312");
   mReply    
= String.Empty;
   mBuffer    
= new Byte[BLOCK_SIZE];
   mRemoteMessage  
= String.Empty;
  }

  
/// <summary>
  
/// 目前状态是否登录成功了
  
/// </summary>
  public Boolean Logined
  {
   
get
   {
    
return _Logined;
   }
   
set
   {
    _Logined 
= value;
   }
  }

  
/// <summary>
  
/// 路径
  
/// </summary>
  public String RemotePath
  {
   
get
   {
    
return _RemotePath;
   }
   
set
   {
    _RemotePath 
= value;
   }
  }

  
/// <summary>
  
/// 地址
  
/// </summary>
  public String RemoteHost
  {
   
get
   {
    
return _RemoteHost;
   }
   
set
   {
    _RemoteHost 
= value;
   }
  }

  
/// <summary>
  
/// 端口
  
/// </summary>
  public Int32 RemotePort
  {
   
get
   {
    
return _RemotePort;
   }
   
set
   {
    _RemotePort 
= value;
   }
  }

  
/// <summary>
  
/// 帐号
  
/// </summary>
  public String RemoteAccounts
  {
   
get
   {
    
return _RemoteAccounts;
   }
   
set
   {
    _RemoteAccounts 
= value;
   }
  }

  
/// <summary>
  
/// 密码
  
/// </summary>
  public String RemotePassword
  {
   
get
   {
    
return _RemotePassword;
   }
   
set
   {
    _RemotePassword 
= value;
   }
  }

  
/// <summary>
  
/// 登录指定的地址
  
/// </summary>
  public void Login()
  {
   mClientSocket  
= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   IPEndPoint mEPoint 
= new IPEndPoint(Dns.Resolve(this.RemoteHost).AddressList[0], this.RemotePort);
   
try
   {
    mClientSocket.Connect(mEPoint);
   }
   
catch(Exception)
   {
    
throw new IOException("无法联接到指定的IP地址");
   }

   ReadReply();

   
if(mRetValue != 220)
   {
    Close();
    
throw new IOException(mReply.Substring(4));
   }

   SendCommand(
"USER "+this.RemoteAccounts);

   
if(!(mRetValue == 331 || mRetValue == 230))
   {
    Cleanup();
    
throw new IOException(mReply.Substring(4));
   }

   
if(mRetValue != 230)
   {
    SendCommand(
"PASS "+this.RemotePassword);
    
if(!(mRetValue == 230 || mRetValue == 202))
    {
     Cleanup();
     
throw new IOException(mReply.Substring(4));
    }
   }

   Logined 
= true;

   Chdir(RemotePath);
  }

  
/// <summary>
  
/// 获取目录下的所有文件名
  
/// </summary>
  
/// <param name="iMask">文件格式,例如 *.* , *.txt , mack.*</param>
  
/// <returns></returns>
  public ArrayList GetFileList(string iMask)
  {
   
if(!Logined)
   {
    Login();
   }

   Socket iSocket 
= CreateDataSocket();


   SendCommand(
"NLST " + iMask);

   
if(!(mRetValue == 150 || mRetValue == 125))
   {
    
throw new IOException(mReply.Substring(4));
   }

   mRemoteMessage 
= String.Empty;
   

   
while(true)
   {
    Int32 iBytes 
= iSocket.Receive(mBuffer, mBuffer.Length, 0);
    mRemoteMessage 
+= ASCII.GetString(mBuffer, 0, iBytes);

    
if(iBytes < mBuffer.Length)
    {
     
break;
    }
   }

   Char[] iSeperator 
= {'\n'};

   ArrayList FileNameList 
= new ArrayList();

   
foreach(String iFileName in mRemoteMessage.Split(iSeperator))
   {
    
if(iFileName.Trim() != "")
    {
                    FileNameList.Add(ChangeUTP8(iFileName));
    }
   }

   iSocket.Close();

   ReadReply();

   
if(mRetValue != 226)
   {

    
throw new IOException(mReply.Substring(4));
   }

   
return FileNameList;
  }

  
/// <summary>
  
/// 获取服务器端的文件大小
  
/// </summary>
  
/// <param name="iFileName"></param>
  
/// <returns></returns>
  public long GetFileSize(String iFileName)
  {
 
   
if(!Logined)
   {
    Login();
   }
 
   SendCommand(
"SIZE " + iFileName);

   
long iSize=0;
 
   
if(mRetValue == 213)
   {
    iSize 
= Int64.Parse(mReply.Substring(4));
   }
   
else
   {
    
throw new IOException(mReply.Substring(4));
   }
 
   
return iSize;
  }

  
/// <summary>
  
/// 设置是否需要二进值传输模式
  
/// </summary>
  
/// <param name="iMode"></param>
  public void SetBinaryMode(Boolean iMode)
  {
 
   
if(iMode)
   {
    SendCommand(
"TYPE I");
   }
   
else
   {
    SendCommand(
"TYPE A");
   }
   
if (mRetValue != 200)
   {
    
throw new IOException(mReply.Substring(4));
   }
  }

  
/// <summary>
  
/// 下载服务器端的文件
  
/// </summary>
  
/// <param name="iRemoteFileName">服务端的文件名</param>
  
/// <param name="iLocationFileName">保存在本地的文件名</param>
  public void Download(String iRemoteFileName,String iLocationFileName)
  {
   Download(iRemoteFileName,iLocationFileName,
false);
  }

  
/// <summary>
  
/// 下载服务器端的文件
  
/// </summary>
  
/// <param name="iRemoteFileName">服务端的文件名</param>
  
/// <param name="iLocationFileName">保存在本地的文件名</param>
  
/// <param name="iResume">是否需要断点续传</param>
  public void Download(String iRemoteFileName,String iLocationFileName,Boolean iResume)
  {
   
if(!Logined)
   {
    Login();
   }

   SetBinaryMode(
true);

   
/* Download File RemoteFileName From RemoteHost/RemotePath */
 
   
if (iLocationFileName.Trim() == String.Empty)
   {
    iLocationFileName 
= iRemoteFileName;
   }

   
if(!File.Exists(iLocationFileName))
   {
    Stream iSt 
= File.Create(iLocationFileName);
    iSt.Close();
   }

   FileStream iOutPut 
= new FileStream(iLocationFileName,FileMode.Open);
   Socket iSocket 
= CreateDataSocket();
   
long iOffset = 0;
 
   
if(iResume)
   {
    iOffset 
= iOutPut.Length;
 
    
if(iOffset > 0 )
    {
     SendCommand(
"REST "+iOffset);
     
if(mRetValue != 350)
     {
      
//throw new IOException(reply.Substring(4));
      
//有些FTP服务器端可能不支持断点续传的功能,从0位置开始传输
      iOffset = 0;
     }
    }
 
    
if(iOffset > 0)
    {
     
//如果支持断点续传的就从新设置流的起始值
     long iNPos = iOutPut.Seek(iOffset,SeekOrigin.Begin);
     
/*Console.WriteLine("new pos="+npos);*/
    }
   }
   SendCommand(
"RETR " + iRemoteFileName);
   
if(!(mRetValue == 150 || mRetValue == 125))
   {
    
throw new IOException(mReply.Substring(4));
   }

   
while(true)
   {
    mBytes 
= iSocket.Receive(mBuffer, mBuffer.Length, 0);
    iOutPut.Write(mBuffer,
0,mBytes);
 
    
if(mBytes <= 0)
    {
     
break;
    }
   }

   iOutPut.Close();

   
if (iSocket.Connected)
   {
    iSocket.Close();
   }

   ReadReply();

   
if(!(mRetValue == 226 || mRetValue == 250))
   {
    
throw new IOException(mReply.Substring(4));
   }
  }

  
/// <summary>
  
/// 将文件上传到服务端器
  
/// </summary>
  
/// <param name="iFileName">本地的文件名</param>
  public void Upload(String iFileName)
  {
   Upload(iFileName,
false);
  }

  
/// <summary>
  
/// 将文件上传到服务端器
  
/// </summary>
  
/// <param name="iFileName">本地的文件名</param>
  
/// <param name="iResume">是否需要断点续传</param>
  public void Upload(String iFileName,Boolean iResume)
  {
   
if(!Logined)
   {
    Login();
   }
 
   Socket iSocket 
= CreateDataSocket();

   
long iOffset=0;
 
   
if(iResume)
   {
    
try
    {
     SetBinaryMode(
true);
     iOffset 
= GetFileSize(iFileName);
 
    }
    
catch(Exception)
    {
     iOffset 
= 0;
    }
   }
 
   
if(iOffset > 0 )
   {
    SendCommand(
"REST " + iOffset);

    
if(mRetValue != 350)
    {
     
//throw new IOException(reply.Substring(4));
     
//有些服务器端是不支持断点续传的

     iOffset 
= 0;
    }
   }
 
   SendCommand(
"STOR "+Path.GetFileName(iFileName));
 
   
if(!(mRetValue == 125 || mRetValue == 150))
   {
    
throw new IOException(mReply.Substring(4));
   }
 
   FileStream iInput 
= new FileStream(iFileName,FileMode.Open);
 
   
if(iOffset != 0)
   {
    iInput.Seek(iOffset,SeekOrigin.Begin);
   }
 
   
while((mBytes = iInput.Read(mBuffer,0,mBuffer.Length)) > 0)
   {
    iSocket.Send(mBuffer, mBytes, 
0);
   }

   iInput.Close();
 
   
if (iSocket.Connected)
   {
    iSocket.Close();
   }
 
   ReadReply();

   
if(!(mRetValue == 226 || mRetValue == 250))
   {
    
throw new IOException(mReply.Substring(4));
   }
  }

  
/// <summary>
  
/// 删除服务器端的文件名
  
/// </summary>
  
/// <param name="iFileName">文件名</param>
  public void DeleteRemoteFile(String iFileName)
  {
   
if(!Logined)
   {
    Login();
   }
 
   SendCommand(
"DELE "+iFileName);
 
   
if(mRetValue != 250)
   {
    
throw new IOException(mReply.Substring(4));
   }
  }

  
/// <summary>
  
/// 对服务器端的文件重命名
  
/// </summary>
  
/// <param name="iOldFileName">现在的文件名</param>
  
/// <param name="iNewFileName">新的文件名</param>
  public void RenameRemoteFile(String iOldFileName,String iNewFileName)
  {
   
if(!Logined)
   {
    Login();
   }
 
   SendCommand(
"RNFR "+iOldFileName);
 
   
if(mRetValue != 350)
   {
    
throw new IOException(mReply.Substring(4));
   }
 
   
//提示:FTP服务器端的命令RNTO不会提示你新的文件名是否已重复,它将直接复盖原来那个相同的文件

   SendCommand(
"RNTO "+iNewFileName);

   
if(mRetValue != 250)
   {
    
throw new IOException(mReply.Substring(4));
   }
  }

  
/// <summary>
  
/// 创建一个服务器端的目录
  
/// </summary>
  
/// <param name="iDirName">目录名</param>
  public void MakeDir(String iDirName)
  {
   
if(!Logined)
   {
    Login();
   }
 
   SendCommand(
"MKD "+iDirName);
 
   
if(mRetValue != 250)
   {
    
throw new IOException(mReply.Substring(4));
   }
  }

  
/// <summary>
  
/// 移除服务器端的目录
  
/// </summary>
  
/// <param name="iDirName">目录名</param>
  public void RemoveDir(String iDirName)
  {
   
if(!Logined)
   {
    Login();
   }
 
   SendCommand(
"RMD "+iDirName);
 
   
if(mRetValue != 250)
   {
    
throw new IOException(mReply.Substring(4));
   }
  }


  
/// <summary>
  
/// 创建连接接口
  
/// </summary>
  
/// <returns></returns>
  private Socket CreateDataSocket()
  {
   SendCommand(
"PASV");

   
if(mRetValue != 227)
   {
    
throw new IOException(mReply.Substring(4));
   }

   Int32 index1  
= mReply.IndexOf('(');
   Int32 index2  
= mReply.IndexOf(')');
   String iPData  
= mReply.Substring(index1+1,index2-index1-1);
   Int32[] iParts  
= new Int32[6];
   Int32 iLen   
= iPData.Length;
   String iBuf   
= String.Empty;
   Int32 iPartCount 
= 0;

   
for (int i = 0; i < iLen && iPartCount <= 6; i++)
   {
    Char iCh 
= Char.Parse(iPData.Substring(i,1));
    
if (Char.IsDigit(iCh))
    {
     iBuf 
+= iCh;
    }
    
else if (iCh != ',')
    {
     
throw new IOException("Malformed PASV Reply: " + mReply);
    }

    
if (iCh == ',' || i+1 == iLen)
    {
     
try
     {
      iParts[iPartCount
++] = Int32.Parse(iBuf);
      iBuf 
= String.Empty;
     }
     
catch (Exception)
     {
      
throw new IOException("Malformed PASV Reply: " + mReply);
     }
    }
   }

   
string IPAddress = iParts[0] + "."+ iParts[1]+ "." + iParts[2] + "." + iParts[3];

   
int iPort = (iParts[4] << 8) + iParts[5];

   Socket iSocket 
= new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
   IPEndPoint iEPoint 
= new IPEndPoint(Dns.Resolve(IPAddress).AddressList[0], iPort);

   
try
   {
    iSocket.Connect(iEPoint);
   }
   
catch(Exception)
   {
    
throw new IOException("无法联接到指定的IP地址");
   }

   
return iSocket;
  }


  
/// <summary>
  
/// 更新当前操作目录
  
/// </summary>
  
/// <param name="iDirName">目录名</param>
  public void Chdir(String iDirName)
  {
   
if(iDirName.Equals("."))
   {
    
return;
   }

   
if(!Logined)
   {
    Login();
   }

   SendCommand(
"CWD "+iDirName);

   
if(mRetValue != 250)
   {
    
throw new IOException(mReply.Substring(4));
   }

   
this.RemotePath = iDirName;
  }


  
void ReadReply()
  {
   mRemoteMessage 
= String.Empty;
   mReply 
= ReadLine();
   mRetValue 
= Int32.Parse(mReply.Substring(0,3));
  }

  String ReadLine()
  {
   
while(true)
   {
    mBytes   
=  mClientSocket.Receive(mBuffer, mBuffer.Length, 0);
    mRemoteMessage 
+= ASCII.GetString(mBuffer, 0, mBytes);
    
if(mBytes < mBuffer.Length)
    {
     
break;
    }
   }

  

   Char[] iSeperator 
= {'\n'};

   String[] iMess 
= mRemoteMessage.Split(iSeperator);

   
if(iMess.Length > 2)
   {
    mRemoteMessage 
= iMess[iMess.Length-2];
   }
   
else
   {
    mRemoteMessage 
= iMess[0];
   }

   
if(!mRemoteMessage.Substring(3,1).Equals(" "))
   {
    
return ReadLine();
   }
   
/*
      if(debug)
      {
       for(int i=0; i < iMess.Length-1 ; i++)
       {
        Console.WriteLine(iMess[i]);
       }
      }
   
*/
   
return mRemoteMessage;
  }

  
/// <summary>
  
/// FTP中的退出命令
  
/// </summary>
  public void Quit()
  {
   
if(mClientSocket != null)
   {
    SendCommand(
"QUIT");
   }
   Cleanup();
  }

  
/// <summary>
  
/// 关闭方法,和QUIT一样
  
/// </summary>
  public void Close()
  {
   
if(mClientSocket != null)
   {
    SendCommand(
"QUIT");
   }
   Cleanup();
  }


  
/// <summary>
  
/// 断开联接,资源释放
  
/// </summary>
  private void Cleanup()
  {
   
if(mClientSocket!=null)
   {
    mClientSocket.Close();
    mClientSocket 
= null;
   }
   Logined 
= false;
  }

  
/// <summary>
  
/// 向FTP服务器端发送FTP指令
  
/// </summary>
  
/// <param name="iCommand">指令名称</param>
  private void SendCommand(String iCommand)
  {
  
   Byte[] iCmdBytes 
= ASCII.GetBytes((iCommand+"\r\n").ToCharArray());
   mClientSocket.Send(iCmdBytes, iCmdBytes.Length, 
0);
   ReadReply();
  }


        
private string ChangeUTP8(string str)
        {
            
byte[] btCN = System.Text.Encoding.Default.GetBytes(str);
            
string strUTF8 = System.Text.Encoding.UTF8.GetString(btCN);
            
return strUTF8;
        }
 }


 

 

 

 

 

下面是应用的方法 

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;

namespace UploadTest
{
    
public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent();
        }

        
private string ErrorFile;
        
private string RootPath;
        
private string ErrorFileName;
        
private string User;
        
private string Pwd ;
        
private int Port;
        
private string FTPAddress;
        
private string RemoteFile;
        
private const int STime = 1000 * 10;
        
private const string strDe = "*.*";

 


        
#region 写文件
        
/// <summary>
        
/// 写文件
        
/// </summary>
        
/// <param name="Log"></param>
        private void WriteLog(string filename, string filecontent)
        {
            
string path = filename;  
            
try
            {
                
if (!File.Exists(path))
                {
                    Stream ifile 
= File.Create(filename);
                    ifile.Close();
                }
                StreamWriter sw 
= new StreamWriter(filename, true);
                sw.Write(
"\r\n" + filecontent);
                sw.Flush();
                sw.Close();
            }

            
catch (IOException ex)
            {
                
throw new IOException("WriteLog Has Error");
            }

        }
        
#endregion


        
#region  下载文件
        
/// <summary>
        
/// 下载文件
        
/// </summary>
        
/// <param name="PathList"></param>
        private void  DownFTPFile(ArrayList PathList)
        {
            
            
//这里好像贴出来有错误 大家一看便知哈..  FTP地址必须是IP地址
            FtpUtil ftp = new FtpUtil();
             ftp
= User;
            ftp 
= FTPAddress;
            ftp
= Pwd;
            ftp
= RemoteFile;
            ftp
= Port;

            Char[] iSeperator 
= { '\r' };

          
                http:
//www.cnblogs.com/z2002m/admin/ftp://ftp.login/();

                
if (http://www.cnblogs.com/z2002m/admin/ftp://ftp.logined/)
                { 
                  
//  ArrayList PathList = http://www.cnblogs.com/z2002m/admin/ftp://ftp.getfilelist(%22*.txt/");
                    if (PathList != null || PathList.Count > 0)
                    {
                        
for (int i=0;i< PathList.Count;i++)
                        {
                            
string FileName = PathList[i].ToString().Split(iSeperator)[0];
                            http:
//www.cnblogs.com/z2002m/admin/ftp://ftp.download(filename/, Path.Combine(RootPath, FileName), true);
                            http://www.cnblogs.com/z2002m/admin/ftp://ftp.close/();
                        }
                    }
                }
                
else
                {

                    WriteLog(ErrorFileName, 
string.Format(ErrorFileName, "{1}-{2}登录未成功  {0}", DateTime.Now.ToString(), http://www.cnblogs.com/z2002m/admin/ftp://ftp.remoteaccounts/, http://www.cnblogs.com/z2002m/admin/ftp://ftp.remotepassword/));
                    
                }
           
        }

        
#endregion 


        
#region 本地文件名与FTP上面的相比较
        
/// <summary>
        
/// 本地文件名与FTP上面的相比较,返回未下载的文件名
        
/// </summary>
        
/// <param name="FtpFiles">FTP文件。。多个</param>
        
/// <param name="LocalFiles">本地多个</param>
        
/// <returns></returns>
        private ArrayList UndownFiles(ArrayList FtpFiles, string[] LocalFiles)
        {

            
try
            {
                ArrayList NoDownFiles 
= new ArrayList();
                ArrayList DownFiles 
= new ArrayList();

                
for (int i = 0; i < FtpFiles.Count; i++)
                {
                    
bool IsInclude = false;

                    
if (LocalFiles.Length == 0 || LocalFiles == null)
                    {
                        DownFiles.Add(FtpFiles[i]);
                        
continue;
                    }
                    
for (int p = 0; p < LocalFiles.Length; p++)
                    {

                        
if (FtpFiles[i].ToString() == LocalFiles[p])
                        {
                            IsInclude 
= true;
                        }
                     }

                     
if ( !IsInclude )
                    {
                        DownFiles.Add(FtpFiles[i]);
                    }
                }

                
for (int i = 0; i < DownFiles.Count; i++ )
                 {
                    
                     NoDownFiles.Add(DownFiles[i]);
                 }
                 
return NoDownFiles;

            }
            
catch (Exception ex)
            {

                WriteLog(ErrorFileName,
string.Format("Position:LookFiles . ErrorMessage: {0} . Time; {1}", ex.Message, DateTime.Now.ToString()));
                
return null;
            }

        }

        
#endregion


        
#region 查看一个目录下有多少个文件. 取出它的文件名..
        
/// <summary>
        
/// 查看一个目录下有多少个文件. 取出它的文件名.. 格式是 test.txt, cc.txt
        
/// </summary>
        
/// <param name="LocalPath"></param>
        
/// <returns></returns>
        private string[] LookFiles(string LocalPath)
        {
            
if (!Directory.Exists(LocalPath))
            {
                
return null;
            }
            
            
string[] Files = Directory.GetFiles(LocalPath);
            
string[] RerurnFile = Files;
            
if  (Files !=  null  &&  Files.Length>0)
            {
                
for (int i = 0; i < Files.Length;i++ )
                {
                    RerurnFile[i] 
= System.IO.Path.GetFileName(Files[i]);
                }
            }
            
return RerurnFile;
        }

        
#endregion 


        
#region 查看FTP下有多少个文件
        
/// <summary>
        
/// 查看FTP下有多少个文件
        
/// </summary>
        
/// <param name="dir"></param>
        
/// <returns></returns>
        private ArrayList LookFTPfIle(string dir) 
        {
            FtpUtil ftp 
= new FtpUtil();
            http:
//www.cnblogs.com/z2002m/admin/ftp://ftp.remoteaccounts/ = User;
            http://www.cnblogs.com/z2002m/admin/ftp://ftp.remotehost/ = FTPAddress;
            http://www.cnblogs.com/z2002m/admin/ftp://ftp.remotepassword/ = Pwd;
            http://www.cnblogs.com/z2002m/admin/ftp://ftp.remotepath/ = RemoteFile;
            http://www.cnblogs.com/z2002m/admin/ftp://ftp.remoteport/ = Port;

            Char[] iSeperator 
= { '\r' };


          
                http:
//www.cnblogs.com/z2002m/admin/ftp://ftp.login/();

                
if (http://www.cnblogs.com/z2002m/admin/ftp://ftp.logined/)
                {
                     ArrayList PathList 
= http://www.cnblogs.com/z2002m/admin/ftp://ftp.getfilelist(strde/);

                     
for (int i = 0; i < PathList.Count; i++ )
                     {
                         
string StrName = PathList[i].ToString().Split(iSeperator)[0];
                         PathList[i] 
=  StrName;
                     }
                     http:
//www.cnblogs.com/z2002m/admin/ftp://ftp.close/();
                     return PathList;
                }
                
else
                {

                    WriteLog(ErrorFileName, 
string.Format(ErrorFileName, "{1}-{2}登录未成功  {0}", DateTime.Now.ToString(), http://www.cnblogs.com/z2002m/admin/ftp://ftp.remoteaccounts/, http://www.cnblogs.com/z2002m/admin/ftp://ftp.remotepassword/));
                    return null;
                }
        }


      
        
#endregion


        
#region 初始化
        
/// <summary>
        
/// 初始化
        
/// </summary>
        private void LoadWinform()
        {
          ErrorFile 
= "Error.txt";
          RootPath 
= Path.Combine(this.txtLocal.Text.Trim(), DateTime.Now.ToShortDateString().Replace("-", ""));
          ErrorFileName 
= Path.Combine(this.txtError.Text.Trim(), ErrorFile);
          User 
= this.txtUser.Text.Trim();
          Pwd 
= this.txtPwd.Text.Trim();
          
int i=21;
          
bool IsOK= int.TryParse(this.txtPort.Text.Trim(),out i);

          Port 
= IsOK ? i : 21;
          FTPAddress 
= this.txtFTP.Text.Trim();
          RemoteFile 
= this.txtRemote.Text.Trim();

          
this.timerClick.Interval = string.IsNullOrEmpty(this.txtInt.Text.Trim()) ? STime : int.Parse(this.txtInt.Text.Trim()) * 1000 * 3600 ;
      }

        
#endregion

     
        
private void Form1_Load(object sender, EventArgs e)
         {
             
this.timerClick.Stop();
        }

        
private void timer1_Tick(object sender, EventArgs e)
        {
            
try
            {
                
if (!Directory.Exists(RootPath))
                {
                    Directory.CreateDirectory(RootPath);
                }

                
if (!File.Exists(ErrorFileName))
                {
                    File.Create(ErrorFileName);
                }

                ArrayList list 
= LookFTPfIle("dd");
                
if (list != null)
                {

                    
// 取到未下载的文件.. 

                    
string[] LocalPaths = LookFiles(RootPath);
                    ArrayList unPathList 
= UndownFiles(list, LocalPaths);

                    
if (unPathList != null)
                    {
                        
//  开始下载
                        DownFTPFile(unPathList);
                    }
                }
            }

            
catch(IOException ex)
            {
                WriteLog(ErrorFileName, ex.Message
+"; time: "+DateTime.Now.ToString());
                
this.timerClick.Stop();
                
this.timerClick.Start();
            }
           
        }

        
private void btnSave_Click(object sender, EventArgs e)
        {
          
this.timerClick.Stop();
          LoadWinform();
          
this.timerClick.Start();
          
this.btnSave.Enabled = false;
        }

        
private void btnStop_Click(object sender, EventArgs e)
        {
            
this.timerClick.Stop();
            
this.btnSave.Enabled = true;
        }


    }
}
posted @ 2008-12-24 10:31  不若相忘于江湖  阅读(503)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3