FtpWebRequest
ファイルを FTP ディレクトリに配置するために使用する必要があります。アップロードする前に、まずこのファイルが存在するかどうかを知りたいです。
このファイルが存在するかどうかを確認するには、どのメソッドまたはプロパティを使用すればよいですか?
FtpWebRequest
ファイルを FTP ディレクトリに配置するために使用する必要があります。アップロードする前に、まずこのファイルが存在するかどうかを知りたいです。
このファイルが存在するかどうかを確認するには、どのメソッドまたはプロパティを使用すればよいですか?
var request = (FtpWebRequest)WebRequest.Create
("ftp://ftp.domain.com/doesntexist.txt");
request.Credentials = new NetworkCredential("user", "pass");
request.Method = WebRequestMethods.Ftp.GetFileSize;
try
{
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if (response.StatusCode ==
FtpStatusCode.ActionNotTakenFileUnavailable)
{
//Does not exist
}
}
原則として、このようなコードの機能に例外を使用することは悪い考えですが、この例では実用主義の勝利だと思います。ディレクトリの呼び出しリストは、この方法で例外を使用するよりもはるかに非効率になる可能性があります。
そうでない場合は、良い習慣ではないことに注意してください。
編集:「それは私のために働く!」
これはほとんどの ftp サーバーで機能するようですが、すべてではありません。一部のサーバーでは、SIZE コマンドが機能する前に「TYPE I」を送信する必要があります。問題は次のように解決されるべきだと考えられたでしょう。
request.UseBinary = true;
残念ながら、FtpWebRequest がファイルをダウンロードまたはアップロードしない限り、"TYPE I" を送信しないのは設計上の制限 (大きなバグです!) です。ここでの議論と Microsoft の回答を参照してください。
代わりに次の WebRequestMethod を使用することをお勧めします。これは、ファイル サイズを返さないサーバーであっても、テストしたすべてのサーバーで機能します。
WebRequestMethods.Ftp.GetDateTimestamp
FTPStatusCode.FileActionOK を使用して、ファイルが存在するかどうかを確認します...
次に、「else」セクションで false を返します。