FTPでの検索ファイル名について

[戻る]
しみじみ 2002/03/29(金) 19:32:00
しみじみと申します。

さて、現在、実行環境はWinNT4.0で、UNIXのFTPサーバに接続し、
サーバのディレクトリ内を検索するプログラムを作成しております。
しかし、以下のプログラムを実行すると、変なファイル名を取得してしまいます。
どうも、日付のような文字列がファイル名に含まれてしまっています。

例)本来取得したいファイル名「aaa」
  実際取得するファイル名 「29ニ・ 11:19 aaa」

これは何が原因なのでしょうか?
もしかして、サーバがUNIXというのが関係しているのでしょうか?

ご教授お願い致します。

CInternetSession  *is;
CFtpConnection      *fc;
CFtpFileFind      *fff;
int          judge;
CListCtrl         *lc;

is  = new CInternetSession();
fc  = is->GetFtpConnection("host", "user", "password");
fff = new CFtpFileFind(fc, 1);

lc = (CListCtrl *)GetDlgItem(IDC_LIST1);  

if ( fc->SetCurrentDirectory("/tmp") != 0 ){
   judge = fff->FindFile( "*.*", INTERNET_FLAG_RELOAD );
   while (judge) {
      judge = fff->FindNextFile();
      if (fff->IsDots() == TRUE) {
         // [.]や[..]の時の処理をここに書く
         continue;
      } else if (fff->IsDirectory() == TRUE) {
         // フォルダーの時の処理をここに書く
         lc->InsertItem(1, fff->GetFileName());
      continue;
      } else {
         // 上記以外の時の処理をここに書く
      }
   }
}
is->Close();

わんこ 2002/04/03(水) 20:15:01
うまくいかないんですか?
ってゆうか、重要な(?)問題になっている部分が
 //上記以外の処理をここに書く
では、「ここ」でなにをやっているのかわかりませんし、
なんでファイル名がそうなるのか答えようがないと思うのですが。

上記のPGの該当個所に以下を追加し、実行してみましたが問題なくファイル名を
取得できました。
違うところは1点、ホスト名にIPアドレスを指定しています。
あとはそのまま貼り付けました。(もちろんユーザーIDやパスワード等は変えましたが)

    // 発見したファイルのファイル名の取得
    CString SFileName;
    char FileName[256];
    memset( FileName, 0x00, sizeof(FileName) );
    // ファイル名(拡張子を含むファイル名)の取得
    SFileName = fff->GetFileName();
    strcpy( FileName, SFileName );
    strcat( FileName, "\n" );
    // ファイル名(ファイル全体のパス)の取得
    SFileName = (LPCTSTR)fff->GetFilePath();
    strcat( FileName, SFileName );
    strcat( FileName, "\n" );
    // ファイル名(拡張子を除いたファイル名)の取得
    SFileName = (LPCTSTR)fff->GetFileTitle();
    strcat( FileName, SFileName );
    strcat( FileName, "\n" );
    // ファイル名(URL)の取得
    SFileName = (LPCTSTR)fff->GetFileURL();
    strcat( FileName, SFileName );
    MessageBox( FileName, "", MB_OK);

単純にメッセージボックスで表示しているだけです。
ファイルがある分だけメッセージボックスが出てきます。

当方、開発環境はWindows2000,VC6.0,MFC使用,サンプルPGはダイアログベースです。
相手サーバーは、UNIXマシンです。あなたの環境がわからないのですが、
相手がUNIXだから上手くいかないわけではないと思いますよ。

しみじみ 2002/04/04(木) 18:30:41
しみじみです。

「lc->InsertItem(1, fff->GetFileName());」で、
取得したファイル名を表示させているだけなのですが、
その時点で、すでに変なファイル名を取得してしまっている様で、
そのあとの処理はまだ作っておりません。

ですので、変なファイル名を取得してしまう原因は、

 ・FTP接続を行い、ファイル名を取得するまで

  か、 

 ・サーバの設定

のどちらかだと思うのですが、全く、見当がつかないため、
質問させて頂きました。

また、原因調査の為に、WindowsのFTPサーバを立てて、
テストしたところ、同プログラムで普通にファイル名が取得できたので、
サーバのOSを疑っておりました。

何かわかりますでしょうか?

わんこ 2002/04/04(木) 19:30:52
むづかしいっすね。
ディレクトリの時はちゃんと出てるのですか?

日付がファイル名に付いて出てくるのは、UNIXの設定が原因の場合もあります。
(前になにかで似たようなことがあったのですが忘れました。
 プロファイルをいじれば直ったような気もしますが。
 ↑↑記憶が定かではないのであまり当てにしないで(..;) )

ファイル情報を FtpFindFirstFile を使って WIN32_FIND_DATA で取得して、
ファイル名を確認してみてください。
確認する環境がないのでちゃんと出るかわかりませんが、
手段があるならとりあえず全部試して見ましょ。

FTPセッションのハンドルを取得すると使えるようになります。
例)HINTERNET hFTP = m_fff->operator HINTERNET();
これを第一引数にセットしてやります。

ここのHPはSDKなんだけど、結構参考になります。
http://www.kumei.ne.jp/c_lang/sdk3/sdk_218.htm

古いスレッドには追加発言できません。