3

IdFTP (Indy 10) コンポーネントを使用して、リモートの場所からいくつかのファイル (zip および txt) をダウンロードしています。各ファイルを取得する前に、TransferType をバイナリに設定します。

IdFTP.TransferType := ftBinary;
IdFTP.Get(ASource, ADest, AOverwrite);

バイナリ モードを使用して、テキスト ファイルとバイナリ ファイルの両方をダウンロードできると思います。ただし、zip ファイルが正しくダウンロードされているのに、テキスト ファイルの内容が台無しになっているようです。テキスト ファイルの TransferType を ASCII に設定すると、期待どおりに動作します。特定のファイルに設定する TransferType を検出するにはどうすればよいですか? 共通点や自動設定はありますか?

4

3 に答える 3

7

Binary フラグが転送されたファイルを台無しにする方法がわかりません。バイナリ型とは、サーバーが何も処理せずにファイルをそのまま転送することを意味します。

FTP サーバーが ASCII フラグを使用する必要がある唯一のことは、テキスト ファイルの行末を正しく処理することです。通常、(1) Unix ではライン フィードのみ、または (2) Windows ではキャリッジ リターン + ライン フィードのいずれかです。しかし、今日では、ほとんどのテキスト エディターはどちらのシステムでも両方を処理します。

したがって、最も安全なのは、非常によく知られているテキスト ファイルには ASCII フラグのみを使用し、おそらく拡張子が .txt のファイルにのみ使用し、その他すべてには Binary フラグを使用することです。

于 2009-09-07T15:47:07.593 に答える
3

疑わしい場合は除外してください (!) - Windows コマンドライン FTP プログラムを使用してサーバーからファイルを転送してみて、それでもテキスト ファイルが間違っているかどうかを確認してください。プログラムは、バイナリ (コマンド BIN) またはテキスト (コマンド ASCII) を転送します。これを使用してファイルを転送しても、期待どおりにファイルが届かない場合は、サーバー側で何かが行われています*。彼らが無事に到着した場合、あなた(またはインディ)のいずれかが何かをしている. :-)

*テキストファイルはどのようにめちゃくちゃになっていますか? Unicode テキスト ファイルを転送する場合は、とにかく BINary として転送する方がよい場合があります。@unknown (yahoo) が言ったように、ほとんどの場合、おそらく BIN モードに固執する必要があることを認めなければなりません。

于 2009-09-07T17:47:36.467 に答える
0

テキストがめちゃくちゃになっているかどうかは、テキストファイル、ANSI、WideCharのいずれを表示しているかにもよると思います。

于 2009-09-07T16:22:12.703 に答える