FtpFindFirstFileでftCreationTimeを取得するには?

解決


yuki  2007-05-08 02:47:21  No: 136328

VB超初心者です。m(__)m

VB6.0でUnix間のFTPツールを作成しています。

Unixにあるファイルの作成日付を取得したいのですが、
FtpFindFirstFile関数を使うという所まではわかり、
ソースを実走してみました。

しかし、WIN32_FIND_DATAのcFileNameにはファイル名が取得されるのに、
ftCreationTimeには"0"がセットされてしまいます。
FtpFindFirstFile関数を実行するだけではftCreationTimeは取得出来ないのでしょうか?

勉強不足で申し訳ないですが、もうどうしていいのか判らないので
どなたかご教授願えればと思います。

宜しく御願いします。


魔界の仮面弁士  2007-05-08 05:28:58  No: 136329

> FtpFindFirstFile関数を実行するだけではftCreationTimeは取得出来ないのでしょうか?

汎用的な取得方法は無いかも知れません。FtpFindFirstFile の解説にも、

http://msdn2.microsoft.com/en-us/library/aa384146.aspx
>> For example, creation and last access dates are often
>> the same as the file's modification date.

とあり、たとえば「作成日時=最終アクセス日時=ファイル更新日」の
状態になることさえある、と書かれていますし。

この場合は、通信先の FTP サーバのマニュアルを調べた上で、そのサーバ向けの
独自コマンドを(FTPCommand API 等で)投げて、独自に取得する必要があるかと思います。
# ただし、そのサーバが作成日時を返すコマンドを用意していない場合は、諦めるしか無いかも。

というのも、FtpFindFirstFile API はおそらく、FTP の LIST コマンドを
呼び出しているものと想像していますが、もしそうなら、FTP の仕様書(RFC959)にも、

ftp://ftp.rfc-editor.org/in-notes/rfc959.txt
>> Since the information on a file may vary widely from system
>> to system, this information may be hard to use automatically
>> in a program, but may be quite useful to a human user.

LIST で得られる情報は、その結果がサーバ依存なので、人間にとっては
有用な一覧でも、プログラムから自動的に利用するのは難しいだろうと
記されているので、期待する結果にならない可能性があるでしょう。

# 実際、作成日時を返さず、更新日のみ返すサーバもあるようですし、あるいは、
# 日付情報を"年月日"ではなく、"月日"だけで返すサーバもあるそうで。
http://support.microsoft.com/kb/306587/ja


yuki  2007-05-08 20:01:57  No: 136330

>魔界の仮面弁士  さん

詳しいお答えありがとうございます。

正しい作成日時を取得するのは難しそうですね。。。
サーバのマニュアルも無く、管理者の方も「作成日時を返すコマンド」等は判らないようですし。。。
仮に、そのコマンドが判ったとしても、FTPCommand API(?)等、使える自信がありませんf^^;

現在、cFileNameにセットされる、日時+ファイル名(文字化けしていますが)をUnixのコードをEUCからSJISに変えて、結果を見てみようと思います。

その際も、取得出来た日時は、必ずしも正しい結果である保証は無いということですよね。。。
その辺りの事も踏まえて、相談して考えてみます。

ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加