使用ReadDirectoryChangesW C++重命名文件夹后获取旧名称和新名称

Thu*_*tne 1 c++ winapi visual-c++

ReadDirectoryChangesW用来识别文件夹更改.当我重命名一个文件夹FILE_ACTION_RENAMED_OLD_NAME动作被解雇时,我能够获得该文件夹的旧名称.但我希望得到该文件夹​​的旧名称和新名称.可以直接使用 ReadDirectoryChangesW吗?

我的C++代码是

ReadDirectoryChangesW ( hDir, (LPVOID)&strFileNotifyInfo, 
            sizeof(strFileNotifyInfo), 
            TRUE, 
            FILE_NOTIFY_CHANGE_DIR_NAME, 
            &dwBytesReturned, 
            NULL,
            NULL)
Run Code Online (Sandbox Code Playgroud)

hyu*_*yun 7

您可以使用_FILE_NOTIFY_INFORMATION.通过使用FILE_NOTIFY_INFORMATION::NextEntryOffset成员变量,您也可以获得FILE_ACTION_RENAMED_NEW_VALUE.

这是一个小代码片段.在你的回调中,

PFILE_NOTIFY_INFORMATION info   = NULL;
size_t offset                   = 0;

do 
{
    info = reinterpret_cast<PFILE_NOTIFY_INFORMATION>(&buffer[offset]);
    offset += info->NextEntryOffset;

    if(info->Action == FILE_ACTION_ADDED)
    {

    }
    else if(info->Action == FILE_ACTION_REMOVED)
    {

    }
    else if(info->Action == FILE_ACTION_MODIFIED)
    {

    }
    else if(info->Action == FILE_ACTION_RENAMED_OLD_NAME)
    {
        //extract old name by using 'info'
    }
    else if(info->Action == FILE_ACTION_RENAMED_NEW_NAME)
    {
        //extract new name by using 'info'
    }

} while (info->NextEntryOffset != 0);
Run Code Online (Sandbox Code Playgroud)

我希望这会对你有所帮助.