ネットワーク上のファイルから、
Memo1.Lines.LoadFromFile('ABC.csv')
で読み込もうとすると、ごくまれに、
「ファイル"ABC.csv".プロセスはファイルにアクセスできません。
別のプロセスが使用中です。は開けません。」
とエラーになります。複数がアクセスするので、他が使用中かどうか
判断したいのですが、方法が分かりません。
よろしく、お願いします。
Win-XP、Delphi7です。
try文で何とかなるかと思います。
exceptの中に来たら使用中かな?
したのリンクが参考になるのでは?
http://delfusa.main.jp/delfusafloor/technic/technic/003_FileInUse.html
ここのサイトはいろいろ載ってるので、見てみるといいと思います。
トップページはこちらです。
たまに管理者の方がこの掲示板にもおいでになるようですね。
http://delfusa.main.jp/delfusafloor/index.shtml
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;
と、こんな感じでいいのでしょうか。
よろしく、お願いいたします。
except内に上記のような処理するのはまずいんじゃないかと・・・
例えば、以下のようにすれば安全かと思いますが。
成功したフラグ↑
for i := 1 to 10 do begin //10は適当
try
LoadFromFile;
except
成功したフラグ↓
end;
if 成功したフラグ↑ then Break;
Application.Processmessages;
sleep(100); //適当
end;
if 成功したフラグ↓ then ShowMessage('今はダメです');
Manbonさん
ありがとうございました。
except end;の間で、ループかなと思っていましたが、
確かに、ゴチャゴチャになりそうですね。
ご丁寧に、ソースまで書いていただき助かりました。
ツイート | ![]() |