1

iOS で ftp がどのように機能するかを理解するために、 Apple の「 SimpleFTPSample 」プロジェクトを使ってテストしています。ダウンロードするファイルのサイズを取得するために、「GetController.m」に2行を追加しました。

-(void)_startReceive
{
.
.
.
  // Open a CFFTPStream for the URL.
  ftpStream = CFReadStreamCreateWithFTPURL(NULL, (CFURLRef) url);
  CFReadStreamSetProperty(ftpStream, kCFStreamPropertyFTPFetchResourceInfo, kCFBooleanTrue); // Added: To get file size
.
.
.
}

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
.
.
.
  switch (eventCode) {
    case NSStreamEventOpenCompleted: {
      // Added: Finally get filesize
      fileSize = [[self.networkStream propertyForKey:(id)kCFStreamPropertyFTPResourceSize] integerValue]; 
      [self _updateStatus:@"Opened connection"];
    } break;
.
.
.
}

今は正しいファイル サイズ (fileSize) を取得していますが、その後ダウンロードが開始されません。「NSStreamEventHasBytesAvailable」のケースは処理されません。どうすればこれを機能させることができますか? どこが失敗?ダウンロード状態の進行状況バーを表示したいので、前に完全なファイルサイズが必要です。

これで私を助けてくれることを願っています。ありがとう!

4

2 に答える 2

0

kCFStreamPropertyFTPFetchResourceInfo を設定すると、その特定のリクエストのリソース サイズのみに関心があることを意味します。

おそらく、GetController のサブクラスである新しいコントローラーを作成し、それを StatController と呼ぶ必要があります... _startReceive とストリーム ハンドラーを新しいメソッドにオーバーライドします。

非同期ダウンロードを開始する前に、StatController を使用してリソース サイズを取得します。

于 2011-04-29T06:47:27.680 に答える
0

必要なファイルサイズを取得するには:

case NSStreamEventOpenCompleted: {
      fileSize = [[self.networkStream propertyForKey:(id)kCFStreamPropertyFTPResourceSize] integerValue];}

ところで、ftp サーバー内のファイルの更新日を取得する方法を知っていますか??

于 2011-08-19T15:26:41.393 に答える