1

サーバー上に DIR が存在するかどうかを確認するにはどうすればよいですか? 私はファイルが存在するかどうかを確認できますが:

try
{
    FtpWebRequest request=null;

    request = (FtpWebRequest)WebRequest.Create("ftp://" + webrequestUrl + "/somefile.txt");
    request.Credentials = new NetworkCredential(username, password);
    request.Method = WebRequestMethods.Ftp.ListDirectory;
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
    {
        // Okay.  
    }
}
catch (WebException ex)
{
    if (ex.Response != null)
    {
        FtpWebResponse response = (FtpWebResponse)ex.Response;
        if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
        {
            //task
        }
    }
}

しかし、どうすればDIRを確認できますか? URI で DIR のみを指定すると、DIR が存在しない場合はキャッチされません。

4

4 に答える 4

2
request = (FtpWebRequest)WebRequest.Create("ftp://" + webrequestUrl); //no file name
request.Credentials = new NetworkCredential(username, password);
myFtpRequest.Method = WebRequestMethods.Ftp.ListDirectory;

ファイル/ディレクトリがリストされているかどうかを確認します。

応答を調べる必要があります。応答には、可能なファイルとディレクトリのリストが含まれている必要があります。

プログラム フローを処理するために catch を使用しないでください。 MSDN の例

于 2010-01-05T09:39:13.103 に答える
0

私は、コードがあなたが思っていることをしていないと思います。私が理解している限り、あなたが取得しようとしているドキュメントlsdirDOS / Windowsでは、ディレクトリ内のファイルのリストを考えてみてください)。それは意味がありません。ディレクトリ「somefile.txt」にアクセスしようとすると例外が発生するため、多少は機能します。

親のListDirectory応答の出力を確認することで、正しい方法(tm)で実行できるはずです。

ListDirectoryftp://yourserver/を実行して、次のことを確認します。

  • あなたのファイル
  • あなたのディレクトリ

記載されています。

于 2010-01-05T09:21:13.123 に答える
0

edtFTPnetを使用して

  private void ftp_folder_IsExists()
{
    FTPClient ftp = default(FTPClient);

    ftp = new FTPClient("ftp_host_name_here");  // ex.:- no need to use ftp in the host name, provide name only
    ftp.Login("username", "password");

    string[] file_and_folders = ftp.Dir(".", false);// . is used to get all the [files and folders] in the root of FTP

    string[] file_and_folders_1 = ftp.Dir("MyFolder", false);// this will get all the [files and folder] inside MyFolder (ex. ftp.ahostname.com/MyFolder/)


    //checking for a FILE
    if (file_and_folders.Contains("something.txt")) {
        //Do what you want..
    } else {
        //Do what you want..

    }

    //checking for a FOLDER
    if (file_and_folders.Contains("A_Folder")) {
        //Do what you want..
    } else {
        //Do what you want..

    }

}

注 : VB.NET で記述され、http: //converter.telerik.com/ を使用して変換されたコード

于 2015-01-16T12:07:10.533 に答える
0

私が使う:

private bool CreateFTPDirectory(string directory)
{

    try
    {
        //create the directory
        FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri(FtpURI+"/"+directory));
        requestDir.Method = WebRequestMethods.Ftp.MakeDirectory;
        requestDir.UsePassive = true;
        requestDir.UseBinary = true;
        requestDir.KeepAlive = false;
        //requestDir.UseDefaultCredentials = true;
        requestDir.Credentials = new NetworkCredential(UserId, Password);
        requestDir.Proxy = WebRequest.DefaultWebProxy;
        requestDir.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;

        FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse();
        Stream ftpStream = response.GetResponseStream();

        ftpStream.Close();
        response.Close();

        return true;
    }
    catch (WebException ex)
    {
        FtpWebResponse response = (FtpWebResponse)ex.Response;
        if ((response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) || (((int)response.StatusCode)==521))
        {
            response.Close();
            return true;
        }
        else
        {
            response.Close();
            return false;
        }
    }
}

これには、ディレクトリを作成するという副作用もあります。既に存在する場合は、.NET Enum で定義されていない 521 の結果が返されます。

FTP サーバーに接続するとき、Uri を「ftp//ftp.domain.com/somedirectory」と指定することがありますが、これは「ftp://ftp.domain.com/homedirectoryforftp/somedirectory」に変換されます。完全なルート ディレクトリを定義できるようにするには、"ftp://ftp.domain.com//somedirectory" を使用します。これは、マシン上の //somedirectory に変換されます。

于 2010-09-24T17:08:33.577 に答える