2012-04-25 3 views
0

開いたハンドルを持つファイルを削除するべきではありませんか?だから私はファイルを作成し、私はすぐに失敗することを期待して、それを削除しようとします。または、私は間違っていて、ファイルを削除する前にハンドルを閉じる必要はありませんか?開いているハンドルを持つファイルを削除する

HANDLE hFile = CreateFile (TEXT(file),  
        GENERIC_WRITE,   
        0,      
        NULL,     
        OPEN_ALWAYS,   
        FILE_ATTRIBUTE_NORMAL, 
        NULL);     

if (hFile == INVALID_HANDLE_VALUE) 
{ 
    //FAIL 
} 

if(DeleteFile(file)) 
{ 
    //Should it ever get here cos i dont close the handle? 
} 
+2

この質問はOS /ライブラリ固有のものですか?それに応じてタグを付けます。 – iammilind

+0

おそらくWindows? –

+0

は文書によれば、ハンドルは開いていても、閉じられるまで書き込み可能なままです。私はこれがすべてのPOSIXベースのシステムに当てはまると考えています。 –

答えて

0

はい、失敗します。

通常のI/Oまたはメモリマップファイル用に開いている ファイルをアプリケーションが削除しようとすると、DeleteFile関数が失敗します。

0

これを試しましたか?

アプリケーションが通常のI/Oまたはメモリマップファイルとして開いているファイルを削除しようとすると、DeleteFile関数が失敗します。

あなたがそのような動作をしていない場合は、ファイルを開いた方法が間違っていると思います。ファイルが開いているかどうかの確認は完全に包括的ですか?まずファイルに書き込もうとしましたか?自分のコードの外にファイルが見えますか? (エクスプローラから)詳しくはhereをご覧ください。

2

ファイルのオープン方法によって異なります。共有モードにFILE_SHARE_DELETEが指定されている場合は、他のユーザーによって削除される可能性があります。

ファイルをメモリマップしていても、このフラグ(および読み取り/書き込み共有)で開いていても、シェルでも削除することができます(少なくともこれを試しましたが、ファイルの名前が変更され、ごみ箱に移動された可能性があります)。そのような場合、その後メモリにアクセスすると、 'InPageError' Cスタイルの例外が発生します。

関連する問題