■ LoadFromFileのエラー

[Delphi Q & A 掲示板] [過去ログの一覧]


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

Win-XP、Delphi7です。

Manbon 2009/02/24(火) 15:12:30 <初心者>
try文で何とかなるかと思います。
exceptの中に来たら使用中かな?

まこと 2009/02/24(火) 20:39:11
したのリンクが参考になるのでは?

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

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

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

sato 2009/02/25(水) 10:46:09 <初心者>
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 <初心者>
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 <初心者>
[[解決]]

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

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library