2011-07-01 21 views
0

ファイルのサイズを確認することはできますか?私はファイルが最初にフォルダにコピーされたときに通知を受け取りますが、ファイルを処理する前にコピーが完了するまで待つ必要があります。Delphiリアルタイムでファイルサイズを確認する

私はJclFileUtils.GetSizeOfFile(Filename)を使用しましたが、それは私に現在のファイルサイズではなく「予想される」ファイルサイズを与えます。

よろしくお願いします。ピーター

+0

なぜソースファイルのファイルサイズを聞かないのですか? –

+0

新しいファイルが完成したかどうかはわかりません。私は、新しいファイルサイズがソースファイルサイズよりも小さくなるのを待っています。 –

+0

あなたは実際に進行状況について質問していますか? (300メガバイトのファイルをコピーした100KB?)。もしそうなら、ファイルコピーコードをあなた自身で書いてみてください。そして、100kbごとに、またはあなたが決めたものを通知を実装することができます。 –

答えて

1

私はファイルコピーがいつ完了したかを判断しようとすることをあきらめることを決めました。代わりに、TFileStreamを使用すると、ファイルが使用されているかどうかの信頼できる表示が得られました。ファイルはもうそれを処理しようとする前に使用されていないまで、私がチェックしに保つことができる。このように

function IsFileInUse(Filename: string; var ResultMessage: string): boolean; 
var 
    Stream: TFileStream; 
begin 
    Result := True; 
    ResultMessage := ''; 
    try 
    Stream := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite); 
    try 
     Result := False; 
    finally 
     FreeAndNil(Stream); 
    end; 

    Except on E: Exception do 
    ResultMessage := 'IsFileInUse: ' + E.Message 
    end; 
end; 

0

コピー機能で使用する技術によって異なります。ほとんどのcopy-methodsは、ファイルのコピーを開始する前にディスク領域を最初に割り当てます。したがって、4 GBのファイルをコピーする場合は、合計4 GBのランダムデータを含むファイルを作成してシステムを開始します。 (それは雷が速く、btw。)それはデータ自体をコピーしますが、ファイルサイズはすでにあなたが期待しているものです。 これは、実際にデータをコピーするのに十分なディスク容量があるかどうかをsysmenが確認できるという利点があります。

独自のファイルコピー機能を作成すると、ファイルコピー機能を完全に制御できます。そうでなければ、選択したコピー方法が提供するものに限られます。だから、どのようにファイルをコピーしますか?

+0

ファイルはリモートユーザによってコピーされるので、コピー/貼り付けが最も一般的です。私はフォルダー内の変更を私に通知するために、フォルダーモニター(ReadDirectoryChangesW)を使用します。 –

+2

Windowsのコピー/ペーストは、十分な領域があることを保証するためにコピーする前にディスクスペースを割り当てます。したがって、それはあなたにそれが進歩/成長を見る方法を提供しません... –

0

ファイルのコピー処理を制御できるのであれば、コピールーティンに一時ファイル名を使用してファイルを作成させるのが最も簡単です。完了したら、ファイル名を修正するように名前を変更します。 そのようにして、Windowsフォルダの監視を使って名前の変更を監視することができます(JCLには、これを支援するコンポーネントが含まれていますが、ここからの名前はわかりません)。コードがトリガされると、相手側がファイルの書き込みを完了したことを確認できます。 私が使った簡単なトリックは、コピープロセスが '$$$'拡張子の新しいファイルを作成することでした。私のコードはまだそれらのために誘発したが、彼らは彼らの適切なファイル名に改名されるまでそれらを無視した。

これが役に立ちます。

+0

ああ。 Wimへのあなたの返事が見えなかったので...私の解決策は無事です。 –

+1

別のオプションとして、時々(タイマーベースの)ファイルの排他ロックを試行することがあります。コピープロセスが書いている間、これは不可能です。ファイルをロックすると、コピーが完了した(または中止された)ことがわかります。 –

+0

これはファイルが完全であることを確認する最も有望な方法のようです。ありがとうございました。 –

関連する問題