2014-10-28 3 views
1

FTP 서버에서 파일을 수신했습니다. 파일 이름이 동적으로 생성됩니다. 서버에 파일이 있는지 확인하는 프로그램을 작성하려고합니다.FTP에 파일이 있는지 확인하십시오. - 파일 이름을 모르 십니다.

 string userName = Dts.Variables["User::SFTPUsername"].Value.ToString(); 
     string password = Dts.Variables["User::SFTPPassword"].Value.ToString(); 
     **string fileName = Dts.Variables["User::FilePattern"].Value.ToString();** 
     string ftpURL = String.Format("ftp://11.11.11/upload/{0}", fileName); 

      WebClient request = new WebClient(); 
      request.Credentials = new NetworkCredential(userName, password); 


      FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(ftpURL); 
      ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize; 
      ftpRequest.Credentials = new NetworkCredential(userName, password); 

      using (FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse()) 
      { 
       byte[] newFileData = request.DownloadData(ftpURL.ToString()); 
       string fileString = System.Text.Encoding.UTF8.GetString(newFileData); 

       string strexist = String.Format("exist"); 
       MessageBox.Show(strexist); 
       Dts.Variables["User::FileExists"].Value = true; 
      } 

"파일 이름"을 지정하는 경우에만 정상적으로 작동합니다. 어쨌든 와일드 카드 검색 ("* .txt")을 수행하거나 anyfile이 업로드 폴더에 있는지 검색 할 수 있습니까?

감사합니다.

답변

2

FTP에서 파일 이름을 나열 할 수 있습니다. 아래처럼 ...

  FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpURL); 
      request.Method = WebRequestMethods.Ftp.ListDirectory; 

      FtpWebResponse response = (FtpWebResponse) request.GetResponse(); 
      using (Stream respStream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(respStream); 
       //Read each file name from the response 
       for (string fname = reader.ReadLine(); fname != null; fname = reader.ReadLine()) 
       { 
        // Add the file name into a list 
       } 
      } 

목록 개수가 0이면 사용할 수있는 파일이 없습니다. 또한 단일 요청에서 각 파일 이름을 목록으로 가져옵니다.

foreach loop을 사용하여 목록 값을 반복합니다. 그리고 위의 코드를 메서드로 만듭니다. 메소드에 파일 이름을 전달하십시오.

또한 특정 파일 이름이 있는지 또는 목록에 없는지 확인하십시오.

참고 : 위의 코드 URL-파일 이름을 제공 할 필요에서.

2

확실합니다!

ftpURL을 해당 디렉토리 이름으로 설정하고 request.Method에서 WebRequestMethods.Ftp.ListDirectory;으로 설정하십시오.

 var request = (FtpWebRequest)WebRequest.Create("ftp://www.example.com/uploads"); 
     request.Method = WebRequestMethods.Ftp.ListDirectory; 
     request.Credentials = new NetworkCredential(userName, password); 

     using (FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse()) 
     { 
        ... 
     }  

예를 들어, http://timtrott.co.uk/ultimate-guide-ftp/http://msdn.microsoft.com/en-us/library/ms229716%28v=vs.110%29.aspx (참고 : WebRequestMethods.Ftp.ListDirectoryDetails 대신 ListDirectory의 후자의 사용, 당신은 약간 수정해야 할 수도 있으므로) 확인하십시오.