LoadFromFileのエラー

解決


sato  2009-02-24 14:27:47  No: 33455  IP: 192.*.*.*

ネットワーク上のファイルから、
Memo1.Lines.LoadFromFile('ABC.csv')
で読み込もうとすると、ごくまれに、
「ファイル"ABC.csv".プロセスはファイルにアクセスできません。
別のプロセスが使用中です。は開けません。」
とエラーになります。複数がアクセスするので、他が使用中かどうか
判断したいのですが、方法が分かりません。
よろしく、お願いします。

Win-XP、Delphi7です。

編集 削除
Manbon  2009-02-24 15:12:30  No: 33456  IP: 192.*.*.*

try文で何とかなるかと思います。
exceptの中に来たら使用中かな?

編集 削除
まこと  2009-02-24 20:39:11  No: 33457  IP: 192.*.*.*

したのリンクが参考になるのでは?

http://delfusa.main.jp/delfusafloor/technic/technic/003_FileInUse.html

ここのサイトはいろいろ載ってるので、見てみるといいと思います。

トップページはこちらです。
たまに管理者の方がこの掲示板にもおいでになるようですね。
http://delfusa.main.jp/delfusafloor/index.shtml

編集 削除
sato  2009-02-25 10:46:09  No: 33458  IP: 192.*.*.*

Manbonさん  まことさん  ありがとうございます。
if *** then    ...(1)
  LoadFronFile ...(2)
(1)の***の部分を、FileInUse がFalse  か
hFile:=FileOpen(filename,fmOpenRead)にして、ハンドルが取得できても
わずかのタイムラグのため、(2)に移った時に状態が、変わる事があるようで
エラーになる時があります。
結局、
try
  LoadFronFile
except 
  on EErr: Exception do begin
      //少しウェイトをかけて、
      //再度、LoadFronFile
  end;
end;
と、こんな感じでいいのでしょうか。
よろしく、お願いいたします。

編集 削除
Manbon  2009-02-25 11:56:58  No: 33459  IP: 192.*.*.*

except内に上記のような処理するのはまずいんじゃないかと・・・
例えば、以下のようにすれば安全かと思いますが。

成功したフラグ↑
for i := 1 to 10 do begin //10は適当
  try
    LoadFromFile;
  except
    成功したフラグ↓
  end;

  if 成功したフラグ↑ then Break;
  Application.Processmessages;
  sleep(100); //適当
end;

if 成功したフラグ↓ then ShowMessage('今はダメです');

編集 削除
sato  2009-02-25 13:31:15  No: 33460  IP: 192.*.*.*

Manbonさん
ありがとうございました。
except end;の間で、ループかなと思っていましたが、
確かに、ゴチャゴチャになりそうですね。
ご丁寧に、ソースまで書いていただき助かりました。

編集 削除