10

Windows でファイルを移動できるようにするユーティリティを作成しようとしています。使用中のファイルが見つかった場合、再起動時にそのファイルを移動するように設定します。

MoveFileEx ( http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx ) がこれに対する正しい呼び出しのようですが、探しているエラー コードがわかりません。 GetLastError ( http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx ) から、ファイルが使用中であったことを確認します。

実際のアクセス許可の問題がある場合、ユーティリティが失敗することを望みます。そこに書き込めないエラーと使用中の上書きエラーを区別する方法はありますか?

また、移動しようとしているファイルがユーザーの一時フォルダーにある場合、名前の変更が遅れる前にそれらのファイルは削除されますか?

4

1 に答える 1

10

ファイルが使用中かどうかを確認するには、最初に CreateFileを呼び出す必要があります。

ファイルが使用中かどうかを確認するには:

有効なファイル ハンドルを取得した場合、そのファイルには、このファイルを既に開いているプロセスと競合する共有アクセス許可がないことがわかります。

共有アクセスを指定しない (CreateFile 呼び出しの dwShareMode パラメータに 0 を指定する) と、他のプロセスが現在何らかの方法でそのファイルを使用している場合、ファイル ハンドルは取得されません。この場合、GetLastError は次を返します。ERROR_SHARING_VIOLATION (32)


ファイルへのアクセスにセキュリティ上の問題があるかどうかを確認するには:

そのファイルへのアクセス許可の問題があるかどうかを確認するために、CreateFile 呼び出しも失敗しますが、別の GetLastError が発生します。あなたは得るでしょう:ERROR_ACCESS_DENIED (5)

于 2009-04-02T14:33:23.283 に答える