2012-08-28 2 views
0

테이블 열의 파일 이름이 존재하면 ftp 서버 디렉토리에 파일 이름이 있는지 확인한 다음 update (update query 사용) 열 Isexists 값을 1 그대로 유지합니다.이 FtpWebRequest 코드를 더 빠르게 만드는 방법은 무엇입니까?

DataTable을 사용하여 각 행 (파일 이름)을 읽은 다음 항상 FtpWebRequest를 작성하여 파일이 존재하지 않는지 확인합니다.

이 방법은 CheckIfFtpFileExists(string fileUri입니다.) 횟수를 요청하는 것은 번호와 같습니다. DataTable의 행 수

FTP 인증을 만들 수있는 방법이 있습니까? 한 번만 호출 한 다음 함수를 호출하십시오.

제안 사항 속도를 향상시키기 위해 어떻게 코드를 향상시킬 수 있습니까?

namespace FTP_File_Check 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string connString = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DMSTG;Data Source=."; 



    string sql = @"SELECT full_file_name from Intellitrack.S_Sr_att_Delta_Consolidated_28082012 where Isexists=0"; 

     SqlConnection conn = new SqlConnection(connString); 
      conn.Open(); 
      SqlDataAdapter da = new SqlDataAdapter(sql, conn); 
      DataTable dt = new DataTable(); 
      da.Fill(dt); 


      foreach (DataRow row in dt.Rows) 
      { 
       foreach (DataColumn col in dt.Columns) 
       { 


        SqlConnection sqlConnection1 = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DMSTG;Data Source=."); 
        SqlCommand cmd = new SqlCommand(); 
        cmd.CommandType = CommandType.Text; 

        if (CheckIfFtpFileExists("ftp://myftpaddressgoeshere.com/0708/" + row[col].ToString())) 
        { 
         // Found File Exists 
         cmd.CommandText = @"UPDATE Intellitrack.S_Sr_att_Delta_Consolidated_28082012 
             SET Isexists = 1 
             where full_file_name='" + row[col].ToString() + "'"; 
         cmd.Connection = sqlConnection1; 

         sqlConnection1.Open(); 

         cmd.ExecuteNonQuery(); 
         sqlConnection1.Close(); 

        } 


       } 

      } 

    } 

    public static bool CheckIfFtpFileExists(string fileUri) 
    { 

      FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(fileUri); 
      request.Credentials = new NetworkCredential("myuserid", "mypassword"); 
      request.KeepAlive = true; 
      request.ConnectionGroupName = "file"; 
      request.ServicePoint.ConnectionLimit = 8; 
      request.UseBinary = true; 
      request.UsePassive = false; 

      request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 


      try 
      { 

       FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

      } 
      catch (WebException ex) 
      { 
       FtpWebResponse response = (FtpWebResponse)ex.Response; 
       if (FtpStatusCode.NotLoggedIn == response.StatusCode) 
       { 
        Console.WriteLine("Failed to connect to ftp server"); 
        Console.ReadLine(); 
        Environment.Exit(99); 

       } 
       else 
       { 

        if (FtpStatusCode.ActionNotTakenFileUnavailable == response.StatusCode) 
        { 

         return false; 
        } 
       } 
      } 

     return true; 
     } 


    } 



} 
+0

은 모두 동일한 원격 디렉토리에있는 파일입니까? – paul

+0

원격 서버의 @paul yes를 하나의 디렉토리에 저장합니다. –

답변

-1

아마도 당신이 WebRequestMethods.Ftp.ListDirectoryDetails을 사용할 수 있습니다, 이것은 하나의 호출에 당신에게 모든 원격 파일의 목록을 줄 것이다. 이것을 List<string>에 저장 한 다음이 목록에 대해 데이터베이스의 각 행을 확인하십시오.

관련 문제