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

时间:2014-03-14 04:38:18

标签: 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)

1 个答案:

答案 0 :(得分: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);

我希望这对你有所帮助。