无法访问CreateDirectory创建的目录

时间:2012-11-13 23:13:31

标签: c++ winapi createfile

我对以下情况感到困惑。 我的应用程序试图找到一个指定的目录:

HANDLE          _dh, _fh;       // Handles for a files
_dh = CreateFile( _ddn , GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_DIRECTORY , NULL );

如果目录不存在,应用程序会创建它:

    if( _dh == INVALID_HANDLE_VALUE ) {
        if( GetLastError() == ERROR_FILE_NOT_FOUND){
            CreateDirectory( _ddn , NULL ); }
        else { 
            CStringW _err;
            DWORD _ed = GetLastError();
            _err.Format( L" ERROR# %u", _ed );
            MessageBox ( NULL , _err , L"123" , MB_OK );
            PostQuitMessage(0);
            return FALSE; } }
CloseHandle( _dh );

这只是第一次有效。当目录已存在时,CreateFile失败,错误#5:即使重新启动应用程序,也会拒绝访问。

我的错误在哪里?

更新

刚尝试手​​动创建目标文件夹 - 同样的问题。

CreateFile( _ddn , GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_DIRECTORY , NULL );

此调用始终调用ERROR_ACCESS_DENIED错误消息(0x5错误代码)。

1 个答案:

答案 0 :(得分:3)

来自MSDN

  

要使用CreateFile打开目录,请将fILE_FLAG_BACKUP_SEMANTICS标志指定为dwFlagsAndAttributes的一部分。

所以改为:

_dh = CreateFile( _ddn , GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , FILE_FLAG_BACKUP_SEMANTICS , NULL );

代替。

不要使用FILE_ATTRIBUTE_DIRECTORY,甚至没有记录。