[delphi-users:2163] FileExistsについて

587 views
Skip to first unread message

takachan

unread,
Sep 4, 2011, 1:28:01 AM9/4/11
to delphi...@freeml.com
指定したファイルが存在するかどうかをチェックする関数に
FileExistsがありますが、ネットワークで共有ファイルの
チェックをするときにこの関数を使用したら、たまに(10回に1回程度発生)
FileExistsから処理が返ってこないという現象がでて
困っております。

FileExistsを使わずに指定したファイルの存在をチェックするために、
FileOpenまたはAssignFileを使用して自作の関数を作るつもりですが、
これで上記の問題が解決するか不明です。
(2台のPCをつないでテストしても上記問題が発生しないので
実機で確認するしかないのです。)

何かよい改善策をご存知の方いらっしゃいましたら教えて頂きたいです。

以上です。
宜しくお願いします。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
練習や試合の予定調整は「とっとと決め太郎」におまかせ!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hm1GB
-----------------------------------------------------[freeml by GMO]--

高木太郎

unread,
Sep 4, 2011, 5:51:23 AM9/4/11
to delphi...@freeml.com
こんにちは、イマジオムの高木です。

takachan さん:


> 指定したファイルが存在するかどうかをチェックする関数に
> FileExistsがありますが、ネットワークで共有ファイルの
> チェックをするときにこの関数を使用したら、たまに(10回に

> 1回程度発生)FileExistsから処理が返ってこないという現象が
> でて困っております。
>
> FileExistsを使わずに指定したファイルの存在をチェックするために、
> FileOpenまたはAssignFileを使用して自作の関数を作るつもりですが、
> これで上記の問題が解決するか不明です。

 FileExists が誤動作するのを放置するというのは今後不便ですので、
その原因を突き止めた方がいいと思います。

 処理が返ってこないということなのですが、おそらく Windows が
「ネットワーク コンピュータ」を検索しにいっているのでは
ないでしょうか? つまり長い時間かかっても、関数を抜けては
くるのではないかと思いますが、そうではないですか? 本当に
無限に待たされてしまいますか?
――――――――――――――――――――――――――――――――――――
株式会社イマジオム 代表取締役 高木太郎
〒316-0024 茨城県 日立市 水木町 1-11-10
電話:0294-28-0147
ファクシミリ:0294-28-0148
電子メール:tarou_...@imageom.co.jp
ホームページ:http://www.imageom.co.jp/


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
クーポンサイトを選んで検索♪一番おトクなクーポンをGET!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hm42W

takachan

unread,
Sep 4, 2011, 7:21:56 AM9/4/11
to delphi...@freeml.com
高木様

お忙しいところ返信して頂き、
ありがとうございます。

説明不足で申し訳ありません。

処理が返ってこないといっても20秒程経てば
戻ってきます。

今のところ、ファイルが存在しない時に、
この現象が発生しております。

仰るとおり、Windows が
「ネットワーク コンピュータ」を検索しにいっているの
かもしれません。

5秒程度ならまだいいのですが、
20秒は長いのでなんとかしたいです。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
戦国時代の武将達とともに天下統一を目指そう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hm553

高木太郎

unread,
Sep 4, 2011, 8:23:28 AM9/4/11
to delphi...@freeml.com
こんばんは、イマジオムの高木です。

takachan さん:


> 処理が返ってこないといっても20秒程経てば
> 戻ってきます。
>
> 今のところ、ファイルが存在しない時に、
> この現象が発生しております。
>

> 5秒程度ならまだいいのですが、
> 20秒は長いのでなんとかしたいです。

 VCL(バージョン5)のソースコードを見てみましたら、
FileExists は FileAge を呼んでいました。

function FileExists(const FileName: string): Boolean;
begin
Result := FileAge(FileName) <> -1;
end;

FileAge の方はこんな感じです

function FileAge(const FileName: string): Integer;
var
Handle: THandle;
FindData: TWin32FindData;
LocalFileTime: TFileTime;
begin
Handle := FindFirstFile(PChar(FileName), FindData);
if Handle <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(Handle);
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
LongRec(Result).Lo) then Exit;
end;
end;
Result := -1;
end;

ファイルがない場合には、ほとんど FindFirstFile しか実行
されませんから、このAPIで時間がかかっている可能性が
濃厚です。 かなりOS寄りの原因であるように思います。

 20秒もかかるかどうか、当方でも後で試してみます。


――――――――――――――――――――――――――――――――――――
株式会社イマジオム 代表取締役 高木太郎
〒316-0024 茨城県 日立市 水木町 1-11-10
電話:0294-28-0147
ファクシミリ:0294-28-0148
電子メール:tarou_...@imageom.co.jp
ホームページ:http://www.imageom.co.jp/


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
「アルテイル」オンラインカードゲームで暇つぶし!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hm6u4

Reply all
Reply to author
Forward
0 new messages