12

ftplib を使用してファイルを転送しています。すべてがうまくいっています。今、ダウンロードする前に対象ファイルのサイズを取得しようとしています。

  1. まずはftp.size(ファイル名)でサイズを取得してみました。サーバーは、ascii モードではそれができないと不平を言いました。

  2. 次に、ftp.sendcmd("binary") と ftp.sendcmd("bin") を使用してバイナリ モードを設定してみました。どちらの場合も、サーバーは「500バイナリが理解できません」と不平を言いました

この場合、ダウンロードする前に ftplib でファイルのサイズを取得できますか? 私は FTP サーバーを制御しておらず、その動作を変更することもできません。

ありがとう

4

3 に答える 3

27

返信が非常に遅いですが、正解は次のとおりです。これはProFTPDで動作します。

ftp.sendcmd("TYPE i")    # Switch to Binary mode
ftp.size("/some/file")   # Get size of file
于 2011-03-09T05:51:55.687 に答える
4

Ftplib は、ダウンロードする前にファイルのサイズを取得できます。ドキュメントが言うように:

FTP.size(filename) サーバー上の filename という名前のファイルのサイズを要求します。成功すると、ファイルのサイズが整数として返されます。それ以外の場合は None が返されます。SIZE コマンドは標準化されていませんが、多くの一般的なサーバー実装でサポートされていることに注意してください

サーバーがこの機能をサポートしていないようです。

于 2010-07-12T20:34:46.697 に答える
0

「サーバーは、ascii モードではそれができないと不平を言いました。」-- 使用した正確なコードとサーバー応答の正確なテキストを表示してみてください。コピー/貼り付けを使用し、メモリから入力しないでください。

コマンドライン FTP クライアントにアクセスできますか? そうでない場合は、1 つ取得します。これを使用して、サーバーで何ができるかを試してください。REMOTEHELP のようなクライアント コマンドはあなたの味方です。例:

ftp> remotehelp size
214 Syntax: SIZE <sp> pathname

これは、私が接続していたサーバーが SIZE コマンドをサポートすることを示しています。

于 2010-07-12T22:08:25.950 に答える