NonSoft

FTPのタイムスタンプ(日付情報)を使用する時の注意


 ち〜な〜み〜に〜
FTPと日付が絡むプログラムを作る時には注意が必要です。

1.FTPサーバのタイムスタンプは秒が省略されている。
2.FTPサーバの種類によっては年月日時分の一部を省略する事がある。
3.IE(FTP用API)の不具合でタイムスタンプを正しく解釈出来ない事がある。

(検証1)
Windows形式とUNIX形式では返ってくる情報が違う。
UNIX形式では年や時分が省略されるので最悪。
以下の詳細説明を参照してください。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
コマンドプロンプトでdirした時に表示されるファイルの情報
2008/09/20 09:34 311 a.txt
2007/12/22 05:01 310 b.txt
この2つのファイルをFTP経由でリスト取得すると...
(FTPでLISTコマンドと送った時にのレスポンス文字列)

FTPサーバがIISの場合(Windows形式)
09-20-08 09:34AM 311 a.txt
12-22-07 05:01AM 310 b.txt
年が2桁に省略されていますが、日付情報が正しく取得出来ます。

FTPサーバがBlackJumboDogの場合(UNIX形式)
-rwxrwxrwx 1 nobody nogroup 311 Sep 20 09:34 a.txt
-rwxrwxrwx 1 nobody nogroup 310 Dec 22 2007 b.txt
今年(2008年)のファイルは年の情報が省略されています。
前年(2007年)のファイルには時分の情報が省略されています。

TCP/IPで送受信されるパケットに情報が入っていないと言う事は、
どんなに優れたFTPツールでも正確な日付を解釈する事は出来ません!!
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

(検証2)WININETのみ
WININETのバージョンによっては、UNIX形式の日付情報を誤って解釈する事があります
(WININETとはIEで使用しているDLLのようで、IEのリスト表示も同様に誤っていました)。
IE6 Sp2では今日作ったファイルを1年前のファイルとしてリスト表示しました。
Microsoft ではこの問題を認識済みでIE6 Sp1で対応済みとしていますが、
うまく動いていないIE6 Sp2もあります。ちなみにIE7 では問題ないようでした。

(検証3)WININETのみ?
ソラリスのFTPサーバを日本語モードで起動するとWININETで日付情報の取得が出来ません。
英語モードで起動したFTPサーバのみ日付情報が取得出来ます。送られてくる情報の形式が
違う事が理由です。ソラリスのFTPサーバを英語モードで起動するためには/etc/inetd.conf
のFTPの定義を以下のような感じ(バージョンによる...?)で変更する必要があります。
(日本語モード)ftp stream tcp6 nowait root /usr/sbin/in.ftpd
(英_語モード)ftp stream tcp6 nowait root /usr/bin/env env LANG=C /usr/sbin/in.ftpd


<FTPのサンプルソース>
FTP(File Transfer Protocol)送受信のサンプル(VB6)
FTP(File Transfer Protocol)送受信のサンプル(VB.NET)