2014-10-28 98 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中的文件名。 Like Below ...

  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對列表值進行迭代。並將上面的代碼作爲一種方法。將文件名傳遞給方法。

您還可以確保特定的文件名是否存在或不在列表中。

注:在上面的代碼無需提供文件名網址

2

確實有!

嘗試將ftpURL設置爲有問題的目錄名稱,request.MethodWebRequestMethods.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,所以你可能需要稍微修改)。

相關問題