不思議な現象にはまっています。
FtpFindFirstFile、InternetFindNextFileでFTPサーバー上のファイルのタイムスタンプ
を取得するプログラムを作成しているのですが、タイムスタンプの年がずれます。
不可思議なことにずれるのは本日アップロードしたファイルだけです。
"2003"となるところが"2002"が返ってきます、日、時間は正確に返ってきます。
おかしな事にアップロード後一日位して再び読み込むと正確な年が返ります。
某”ホームページxxダー”で読み込むと正確なタイムスタンプが表示されています。
WIN32_FIND_DATA構造体からFILETIME構造体にコピーし FileTimeToSystemTime関数で
SYSTEMTIME構造体に変換しています、過去にアップロードしたファイルや作成したDIR
は正確に読めているのでプログラム自体は間違っていないと思うのですが、この辺あまり
強くないため何か約束事を知らないような気がします、誰かご存知の方。
ひとつ確認ですが・・・
DOS窓のコマンドラインからFTPして、DIRとして得られる
内容では、年の表示は正しいですか?間違っていますか?
それと、そのサーバーはIISですか?
IISであれば、MS−DOS形式とUNIX形式の設定があり
ますが、MS−DOS形式の場合であれば、UNIX形式にすれ
ば、直りますか?
ご確認下さい。
※ 私の場合、IISでUNIX形式で使っていますが、問題は
発生していません。が、MS−DOS形式では行ったことが
ないので、なんとも・・・
以上。
追伸・・・
IISのFTPサーバーであれば・・・
http://support.microsoft.com/default.aspx?scid=kb;ja;173054
http://support.microsoft.com/default.aspx?scid=kb;ja;256312
この場合だと、MS-DOS形式の方がいいようですネ〜
この辺に該当する内容はありませんか?
以上。
岡田 之仁さんありがとうございます。いつも読ませて頂いて、参考にしています。
それと質問の時、名前間違えました nero -> ねろです。(^^;
FTPサーバーはプロバイダーのサーバーで
'ftp.isweb.infoseek.co.jp'と
'ftp.geocities.co.jp'を試しています。いずれも自分のホームページです。
ホームページのアップロードのプログラムを作っています。
ローカルM/CとFTPサーバーのタイムスタンプを見てローカルM/Cが新しい場合は
ホームページ上のファイルを書き換えるソフトです。
本体はVBでFTPコマンドはAPIを使っで作って有ります。
殆ど出来上がって走らせたところ無限ループに落ちてしまうではないですか、
原因を調べると、なんとその時作ったDIRとファイルの年が2002となっています。
日と時間は合っています。しかも不思議な事に有る時間が経つと正しく2003が
返ってきます。正しい年が返るのが24時以降かと思い、昨日は24時に実行して
みましたが2002が返って来ました。寝不足です。もしかしたら日本標準時間
とグリニッチ標準時間の8時間差がキーワードで、8時間経てばどうかと思って
いますが、試していません。
VBで宣言している
' 日付と時刻を定義する構造体
Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
のIntegerあたりが臭いかと思いVBの版で質問しました。
wYear の丸め誤差が出ているのではないかと。。。。
>DOS窓のコマンドラインからFTPして、DIRとして得られる
>内容では、年の表示は正しいですか?間違っていますか?
DOSでやって見ました、DOSはぱりぱり実行して気持ちがいいですね、ただし
DOSコマンドだと年の表示はされないようです。Win95の頃はしていたような気がしますが。
DOSでやっている最中にIEでアップロードやFTPのファイル検索をする方法がある事を
思い出しました、今までは自分のプログラムのバグとばかり思っていましたので忘れて
いました。IEで見てみるとなんとやはり2002となっています、そこでIEでFTPサーバ
に新しいDIRとファイルをアップロードしてみました。するとちゃんと2003でアップ
ロードされます。と、ところが! 一度IEをオフッて再度立ち上げてアップしたDIRと
ファイルを見ると2002になっています。正しく表示されません。不思議です。
前にも書きましたが 某IBMの”ホームページxxダー”では全て正しく表示されます。
サーバーの問題ではなくローカルPCの問題です。これは既にVBの問題ではありませんね。
IE6.0,Win2kProfessonalの環境です。SPは最新版を当ててあります。
日本のローカル年が変わる12月31日24時前後と、グリニッジの標準時間の
年が変わる1月1日の8時が勝負のような気がします。朝8時は自信が有りません。
恐らく・・・
http://support.microsoft.com/default.aspx?scid=kb;ja;284455
この件に該当しませんか?
であれば、WinInet API は使えないことになります。
直にソケット通信してFTPする必要があります・・・
ご確認下さい。
以上。
追伸・・・
VB6で直にソケット通信でFTPできるものは、そうそうに無い
と思います。が、過去に使ったものでは・・・
BASP21 なら、可能かもしれません。
また、VB.NETなら・・・
マイクロソフトからサンプルが掲載されています。
http://support.microsoft.com/default.aspx?scid=kb;ja;812404
私は、VB.NETやC#.NETで、直にソケット通信してFTPするものを自作して
使っていますが、問題は無かったように思いますので・・・
ご検討下さい。
以上。
>この件に該当しませんか?
わー!これだ!!
>'表示される年情報が実際の年の 1 年後になることがあります'
ただし1年前になってしまう。
IE5の時は1年後なったものが、IE6で1年前になってしまった。
'one year before'で検索していたので引っ掛からなかった。
>であれば、WinInet API は使えないことになります。
その通りです。困りました。
>BASP21 なら、可能かもしれません。
見てみました、なるほど使えそうな気がします。
ただし、わがままですが出来ればDLLをインストールしたくない。
>また、VB.NETなら・・・
.NETは好きですが、まだ.NETのフレームワークのインストール率が
低くて。
少し頭を冷やして考えて見ます。
岡田さん本当にありがとうございます。
解決しました。
コンパネの「日付と時刻」でGMTを変えてやろうと思い色々時間を変えているうちに
正常な表示になりました。どうも岡田さんが最初に指摘された
http://support.microsoft.com/default.aspx?scid=kb;ja;173054
の
>[自動的に夏時間の調整をする] チェック ボックスをクリックして、クリアします。
がきいたようです。
「チェック ボックスをクリックして、クリアします。」この意味が良く判らなかった
のですが、デフォルト状態の何かがクリアーされた様です。
>1、[スタート] をクリックし、[設定] をポイントして、[コントロール パネル] を
>クリックし、次に [日付と時刻] をダブルクリックします。
>2、[タイム ゾーン] タブをクリックし、[タイム ゾーン] ボックスの [グリニッジ標準時]
>をクリックします。
>3、[自動的に夏時間の調整をする] チェック ボックスをクリックして、クリアします。
>4、[日付と時刻] タブをクリックし、時間を、現在のローカル時間に一致するように調整します。
>5、[OK] をクリックします。
となっていますがこの通りやるとGMTをローカルタイムにセットしてしまいそうですが、
3と4の間に'ローカルタイムゾーンを選択する'が入りそうです。
一度正しく表示されると2度と元に戻らないようで、正確にどこで直ったか判りません。
これはこれで又困ったもので、私が作ったソフトを不特定の人に配った場合、ほとんどの場合
その人のこのデフォルト状態がクリアされていない可能性が有り、プログラムが正常に動作
しません。仕方ないので、ファイルの中にちょうど一年前のファイルが有ったら、タイムスタンプ
を本日と読み替えて最終的にワーニングを出すようにします。美しくは有りませんが。
ありがとうございました。
解決を入れるのを忘れました。
ツイート | ![]() |