私の考えは、kernel32のCreateFileを使用して、共有違反をチェックすることです。CMDから名前変更コマンドを発行しているときにProcessMonitorでファイルシステムのアクティビティを監視したため、これは機能すると思います。最後のアクティビティは、共有違反が発生したCreateFile呼び出しの失敗でした。
これは、コールのプロセスモニター情報です。
Desired Access: Read Attributes, Delete, Synchronize
Disposition: Open
Options: Synchronous IO Non-Alert, Open Reparse Point
Attributes: n/a
ShareMode: Read, Write, Delete
AllocationSize: n/a
このVBコードを使用して、Process Monitorで同じ情報を提供するが、共有違反を引き起こさない呼び出しを生成しました。
CreateFile(theDirectoryPath, _
FILE_READ_ATTRIBUTES Or DELETE Or SYNCHRONIZE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE Or FILE_SHARE_DELETE, _
Nothing, _
OPEN_EXISTING, _
FILE_ATTRIBUTE_DIRECTORY Or FILE_FLAG_BACKUP_SEMANTICS _
Or FILE_FLAG_OPEN_REPARSE_POINT, _
Nothing)
定数は、さまざまなMSDNおよびpinvoke.netソースから取得されます。
上記のコードをすべてのサブフォルダーで再帰的に呼び出すと、最終的に共有違反が発生しますが、CMDが名前の変更を拒否した場合、再帰しませんでした。
はい、私は例外を捕まえることができることを知っています。しかし、ディレクトリの名前を変更できるかどうかを知りたいポイントと、ディレクトリの名前を変更したいポイントは同じではありません。
編集:
この質問には混乱の原因があった可能性があります。私は許可には関心がありません。ファイルロックが気になります。