しみじみと申します。
さて、現在、実行環境は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();
うまくいかないんですか?
ってゆうか、重要な(?)問題になっている部分が
//上記以外の処理をここに書く
では、「ここ」でなにをやっているのかわかりませんし、
なんでファイル名がそうなるのか答えようがないと思うのですが。
上記の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だから上手くいかないわけではないと思いますよ。
しみじみです。
「lc->InsertItem(1, fff->GetFileName());」で、
取得したファイル名を表示させているだけなのですが、
その時点で、すでに変なファイル名を取得してしまっている様で、
そのあとの処理はまだ作っておりません。
ですので、変なファイル名を取得してしまう原因は、
・FTP接続を行い、ファイル名を取得するまで
か、
・サーバの設定
のどちらかだと思うのですが、全く、見当がつかないため、
質問させて頂きました。
また、原因調査の為に、WindowsのFTPサーバを立てて、
テストしたところ、同プログラムで普通にファイル名が取得できたので、
サーバのOSを疑っておりました。
何かわかりますでしょうか?
むづかしいっすね。
ディレクトリの時はちゃんと出てるのですか?
日付がファイル名に付いて出てくるのは、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