ファイルの使用中を知るには?

解決


やんばるくいな  2004-09-09 05:47:12  No: 10863  IP: [192.*.*.*]

デジカメでjpegファイルを保存します。
そのファイルを別のフォルダへ自動的に移動させたいのですが、
保存途中の場合もあるので、
ファイルの状態(保存途中なのかどうか)を知る方法を教えて下さい。

編集    削除
bob  2004-09-09 06:16:30  No: 10864  IP: [192.*.*.*]

ファイルを移動させようとして、
例外を見た方が早いと思いますが...

編集    削除
やんばるくいな  2004-09-09 17:44:14  No: 10865  IP: [192.*.*.*]

bobさんありがとうございます。
    //  ファイルを移動
try
CopyFile('c:\test\data001.jpg' ,'c:\photo\data001.jpg') ,False);
DeleteFile('c:\test\data001.jpg');

 except on EFOpenError do begin
   ShowMessage('ファイルが開けません!');
 end;
 except on Exception do begin
   ShowMessage('例外が発生しました。');
 end;
end;

こんな感じでいいのでしょうか?
ところで、使用中のエラーコードは、何になるのですか?

編集    削除
jam  2004-09-09 18:00:58  No: 10866  IP: [192.*.*.*]

ファイル移動は RenameFile 関数で可能です。
処理結果は戻り値で判定してください。

編集    削除
やんばるくいな  2004-09-09 18:47:44  No: 10867  IP: [192.*.*.*]

jamさんありがとうございます。
実は、例では同じc:\でしたが、実際には別のドライブに移動しています。

環境を書いていませんでした。
Delphi7.0Jpro、WinXPです。

編集    削除
やんばるくいな  2004-09-09 19:25:06  No: 10868  IP: [192.*.*.*]

bobさん、jamさん
ありがとうございました。
なんとなく見えてきました。

編集    削除
jam  2004-09-09 19:31:39  No: 10869  IP: [192.*.*.*]

RenameFile 関数は別ドライブでも移動可能です。

編集    削除
やんばるくいな  2004-09-09 23:41:14  No: 10870  IP: [192.*.*.*]

jamさん
ありがとうございます。
勉強不足で・・・
感謝します。

編集    削除
ハンドルネームを忘れました  2004-09-10 01:18:18  No: 10871  IP: [192.*.*.*]

解決してるのにすみません、丁度僕も似たような事がやりたくて色々と参考になるものを探してたんですけど、(そしてこちらにたどり着いて・・)
探しながらこんなのを作ってみたんです。
これじゃダメなんですかね・・・
とりあえず開けるようになるまで開いてみて、
開けたえらとりあえず閉じる。一応、自分のPCで巨大なファイルを作ってみて、
それを別フォルダにコピーし・・・てる最中に下記を実行してみたら
問題ないようでしたよ。

  repeat
    nFileHandle := FileOpen(sPath, fmOpenRead);
  until (nFileHandle > 0);

  FileClose(nFileHandle);
  ShowMessage('OK');

編集    削除
固まりそう  2004-09-10 04:00:04  No: 10872  IP: [192.*.*.*]

そのループだと FileOpen が成功するまで固まりますね

編集    削除
やんばるくいな  2004-09-10 18:32:41  No: 10873  IP: [192.*.*.*]

下記のようにしてみました。
   if RenameFile(PChar(oldFile) ,PChar(newFile) ,False)=True then
        begin
          ShowMessage('成功');
        end
   else
        begin
          ShowMessage('移動に失敗しました。もう一度トライします。');
          exit;
        end;

編集    削除
jam  2004-09-10 18:48:30  No: 10874  IP: [192.*.*.*]

この RenameFile はどこの関数ですか?
SysUtils.RenameFile は

function RenameFile(const OldName, NewName: string): Boolean;

で、第3引数はありませんし、ファイル名も String のまま渡せます。

編集    削除
にしの  2004-09-10 20:23:52  No: 10875  IP: [192.*.*.*]

Windowsでは?

編集    削除