LoadFromFileのエラー

解決


sato  2009-02-24 23:27:47  No: 33455

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

Win-XP、Delphi7です。


Manbon  2009-02-25 00:12:30  No: 33456

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


まこと  2009-02-25 05:39:11  No: 33457

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

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

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

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


sato  2009-02-25 19:46:09  No: 33458

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 20:56:58  No: 33459

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 22:31:15  No: 33460

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


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








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