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?
}
4

3 に答える 3

2

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

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

于 2012-04-25T11:43:12.490 に答える
0

はい、失敗します。

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

于 2012-04-25T11:25:32.440 に答える
0

これを試しましたか?MS のドキュメントには、次のように記載されています。

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

したがって、その動作が得られない場合は、ファイルを開いた方法に問題があることをお勧めします。ファイルが開いているかどうかのチェックが完全に包括的であると確信していますか?最初にファイルへの書き込みを試みましたか? 独自のコードの外でファイルを見ることができますか? (つまり、Explorer から)詳細については、こちらを参照してください。

于 2012-04-25T11:32:30.860 に答える