2

会社の FTP でファイルのサイズを取得するために FtpWebRequest を使用しようとしています。しかし、応答を取得しようとするたびに例外がスローされます。以下のコードの catch ブロックでエラーの詳細を参照してください。

string uri = "ftp://ftp.domain.com/folder/folder/file.xxx";
FtpWebRequest sizeReq = (FtpWebRequest)WebRequest.Create(uri);
sizeReq.Method = WebRequestMethods.Ftp.GetFileSize;
sizeReq.Credentials = cred;
sizeReq.UsePassive = proj.ServerConfig.UsePassive; //true
sizeReq.UseBinary = proj.ServerConfig.UseBinary; //true
sizeReq.KeepAlive = proj.ServerConfig.KeepAlive; //false

long size;

try
{
//Exception thrown here when I try to get the response
using (FtpWebResponse fileSizeResponse = (FtpWebResponse)sizeReq.GetResponse())
{
size = fileSizeResponse.ContentLength;
}
}
catch(WebException exp)
{
FtpWebResponse resp = (FtpWebResponse)exp.Response;
MessageBox.Show(exp.Message); // "The remote server returned an error: (550) File unavailable (e.g., file not found, no access)."
MessageBox.Show(exp.Status.ToString()); //ProtcolError
MessageBox.Show(resp.StatusCode.ToString()); // ActionNotTakenFileUnavailable
MessageBox.Show(resp.StatusDescription.ToString()); //"550 SIZE: Operation not permitted\r\n"
}

ただし、このコードは、個人の FTP に接続すると機能します。応答の StatusDescription は、操作が「許可されていない」ことを示しています。私のオフィスの FTP では、ファイル サイズのクエリが許可されていないのでしょうか?

また、サイズを返すディレクトリの詳細を一覧表示しようとしましたが、オフィスの FTP がディレクトリの詳細を個人の FTP とは異なる形式で報告していることに気付きました。多分これが問題ですか?

//work ftp ListDirectoryDetails
-rw-r--r--   1 (?)      user    12345 Nov 16 20:28 some file name.xxx

//personal ftp ListDirectoryDetails
-rw-r--r--    1 user user 12345 Mar 13  some file name.xxx

このブログ投稿を読むと、私の個人的な ftp は Unix 形式の応答を返していると思いますが、私の仕事は Windows 形式の応答を返しています。関係ないかもしれませんが一応書いておきます。

4

3 に答える 3

3

ファイルの基本的な名前付けが原因で問題が発生しました。FTP サーバーに接続するときに、Uri を「ftp//ftp.domain.com/somedirectory」と指定する場合がありますが、これは「ftp://ftp.domain.com」に変換されます。 /homedirectoryforftp/somedirectory". 完全なルート ディレクトリを定義できるようにするには、"ftp://ftp.domain.com//somedirectory" を使用します。これは、マシン上の //somedirectory に変換されます。

于 2010-09-24T17:16:01.297 に答える
1

ログインが処理された後に発生し、現在のディレクトリとしてデフォルトのユーザーディレクトリを取得しました。ユーザーディレクトリを含む完全なパスをuriとして指定していました。WireSharkで追跡しましたが、同じ結果が得られる可能性があります。

于 2009-12-03T17:32:09.300 に答える
0

仕事用FTPでは、所有者アカウントが指定されていないため、拒否されているようです。

于 2009-11-16T23:54:37.740 に答える