FTPサーバーのファイル一覧を取得する関数を作成しています。が、長い一覧になると、途中までしか取得できない現象が発生します。一覧の数によらず、完全に一覧を取得したいのですが、ある長さ以上になると、どうしても最後まで取得できなくなります。
なお、サーバーはサーバーOSでないWindowsのIISを利用していますが、コマンドラインの利用では最後までしっかりファイル一覧はログ出力します。
ファイル一覧の取得はWinsockではFtpFindFirstFile/InternetFindNextFileで取得可能ですが、最終的にWinsockを利用しないため、この関数は利用できません。
取得している関数は下記のような関数です。
// LISTコマンドの結果をファイルftplist.txtに保存
void FtpList(SOCKET s) {
char buf[1024];
char szStrRcv[256] ;
FILE* fp; if (_tfopen_s(&fp, _TEXT("ftplist.txt"), _TEXT("wb+"))) { _tprintf(TEXT("ファイルが開けません\n")); return; } int len; int ncnt = 0 ; do { memset(buf,0,sizeof(buf)) ; len = recv(s, buf, sizeof(buf)-1, 0); fwrite(buf, sizeof(char), len, fp); } while (len == sizeof(buf)-1 ); fclose(fp);
}
この関数ではデータコネクションを引数として渡しています。また、この関数の前に"LIST"コマンドを実行してあります。FTPへの接続はPASV接続です。
「while (len == sizeof(buf)-1 );」を「while (len > 0 ); 」にすると、3回目までは何とか読みます(ただし、bufに満たない途中までしか読み取れらない)が、4回目で待機状態で止まります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。