常駐してメールサーバをチェックしに行くアプリケーションを作っています。最近になって「IOエラー145」が出るようになりました。いろいろ調べて見たのですが、このエラーコードに関する説明が見つかりません。ご存じの方は教えてください。
環境は下記の通り
WindowsXP SP3
Delphi6 Oroffesional
以上、よろしくお願い致します。
Googleで検索すると、
Delphi I/O Errors:
http://erikmartin.com/pro/ioerrors.html
があるみたいですが。
igyさん、ありがとうございました。
おかげさまで問題解決の糸口が見つかりました。
やろうとしていることは、ディレクトリの削除で、これを実行する前に外灯ディレクトリ内のファイルはすべて削除するようにコードを書いていたのですが、タイミング的にまだファイルが残っていると判断されることがあるようです。
具体的な解決策が解りましたら報告します。
sleep(100)ぐらいで回して、タイムアウトを設定すれば良いんじゃ?
Sleepかけるくらいはすでに試行済み。
それでもだめだから聞いてみたわけです。
質問する上で情報の後出しはマナー違反だっての知ってる?
「そのぐらいやってるよ」みたいな反応は何?
回答くれる人をなんだと思ってんの?
あのさ?さん
そんなにとんがらないでもいいんじゃない? Sleepかます位は初心者でも考えることだし…
>これを実行する前に該当ディレクトリ内のファイルはすべて削除するよう
>に>コードを書いていたのですが、タイミング的にまだファイルが残って
そのディレクトリ内にファイルがあるかどうか調べて次に進んでは。
> Sleepかます位は初心者でも考えることだし…
初心者がそこまで考えるとは思えんのだが?
それに、最初は「IOエラー145」、次は「ディレクトリ削除の〜」
さらに「Sleepは使っている」
ソース晒せなくても、どんなコード書いているかくらいの説明は出来るはずなのに、
次々と、情報の後出しをしている点。
あのさ?さんじゃないが、回答する気失せるよ。
まだ、なんか隠していることが出てきて、回答が無駄になると思っている人いるはず。
> ディレクトリの削除で、これを実行する前に外灯ディレクトリ内の
> ファイルはすべて削除するようにコードを書いていたのですが、
> タイミング的にまだファイルが残っていると判断されることがあるようです。
タイミングだけに限らず、ファイルがロックされている場合もある。
ファイルの削除をどのようにしているのかわからないが、例えば
APIを使っているのであれば、GetLastErrorでエラーを確認するとか、
フォルダが削除できるまで、数回トライしてみるとか。
まぁ、どこのディレクトリ削除しているのかもわかんないけどね。
サーバのハードディスクはRAID構成でバッファを積んでいる場合
バッファ遅延を起こして、処理で削除しているのに
fileexistsではファイルが存在している現象が発生したことがあります
fileexistsを使用しないでWin32APIを直接たたいて回避しました
参考になれば
nobukoshi802さん
どうやらそれが原因として突き止めました。最初はFindFirst〜FindNextでファイルが存在しないことを確認してからrmDIrしていたのですが、これだと前記のような現象が発生します。そこで、SHellAPIのSHFileOperationを使ってみたところ、期待したとおりの動作を得ることができました。
var
foStruct: TSHFileOpStruct;
res : integer;
begin
with foStruct do begin
wnd := Handle;
wFunc := FO_DELETE;
pFrom := PChar('フォルダ名' + #0);
pTo := nil);
fFlags := fof_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Res := SHFileOperation(foStruct);
これでいけました。ありがとうございました。
ツイート | ![]() |