C#实现从FTP服务器下载压缩文件并解压.

最近作一个需求,要将移动服务器中的订购关系与话单数据同步到本地服务器.代码如下:

using System;
using FTP;

namespace Syn
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Download
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
   Download d = new Download();
   d.GetFile();
  }

  private FtpClient ftpClient = null;
  private string mSelectFile = string.Empty;

  public void GetFile()
  {
   ftpClient = new FtpClient("FTP地址","/","用户名","密码",21,FtpClient.FtpMode.Active);
   try
   {
    ftpClient.Connect();
    if(ftpClient.Connected)
    {
     string [] files = ftpClient.Dir("*.*");
     string type = "";
     string size = "";
     string name = "";

     foreach(string file in files)
     {
      if(file == "")
       break;
     
      if(ftpClient.SystemType == FtpClient.FtpSystemType.UNIX)
      {
       size = GetSubString(file, 4);
     
       name = GetSubString(file, 8);
       
       System.Console.WriteLine("Unix文件名:"+name);
       
       if(!name.StartsWith("."))
       {
        ftpClient.Get(name,".","");
        try
        {
         System.Diagnostics.Process.Start("cmd","/c winrar e -ad "+name);
        }
        catch(System.ComponentModel.Win32Exception e)
        {
         System.Console.WriteLine(name+"-解压出错:"+ e.ToString());
        }
       }
      }
      else
      {
       System.Console.WriteLine("Win文件名:"+file);
      }      
     }
     ftpClient.DisConnect();
     


    }
    else
    {
     System.Console.WriteLine("连接FTP服务器失败!");
    }
   }
   catch(Exception ex){
    System.Console.WriteLine(ex.Message);
   }
  }

  private string GetSubString(string strRecord, int nSub)
  {
   int nIndex = 0;
   int nPos = 0;
   int nLen = 0;
   string str = strRecord;
   while(nIndex < nSub)
   {
    nPos = 0;
    nLen = 0;
    nPos = str.IndexOf(' ');
    str = str.Substring(nPos).TrimStart(new char[]{' '}); 
    nLen = str.IndexOf(' ');
    nIndex++;
   }
   if(nSub == 8)
    str = str.Substring(0).TrimEnd();
   else
    str = str.Substring(0, nLen);
   return str;
  }
 }
}

引用部分需求如下:

-----------------------------------------------------------------------------------------------------

⑴ 定购关系下载文件名
sc50141.20061220.sms.Z”或“sc50141.20061220.sms”
    ⑵ 定购关系成功下载后和解压文件名
        sc50141.20061220.sms.Z”
       ⑶ 定购关系导入文件名
        sc50141.20061220.sms”
其中“sc”为省份标识,“20061220”为同步日期。
       ⑷ 包月话单下载和第一次解压文件名
    month901723.20061220.010.tar”
⑸ 包月话单第二次解压文件名
    month901723.20061220214555.001010.0028.gz”
⑹ 包月话单导入文件名
              “month901723.20061220214555.001010.0028
              其中“20061220214555”是话单时间,“0010”为省份标识。
------------------------------------------------------------------------------------------------------
posted @ 2008-04-08 14:21  马建康  阅读(1926)  评论(2)    收藏  举报