检查FTP上是否存在文件 - 不知道文件的名称

时间:2014-10-28 11:38:55

标签: c# ssis ftp ftpwebrequest

我在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;
            }

仅当我指定“fileName”时才能正常工作。无论如何我可以进行通配符搜索(“* .txt”)或搜索任何文件是否在上传文件夹中?

任何帮助表示赞赏!!

2 个答案:

答案 0 :(得分: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,因此您可能需要稍微修改一下。)

答案 1 :(得分: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迭代列表值。并将上面的代码作为一种方法。将文件名传递给方法。

您还可以确保列表中是否存在特定文件名。

注意:在上面的代码中无需提供 文件名 网址