2014-03-14 135 views
1

我正在使用ReadDirectoryChangesW來識別文件夾更改。 當我重命名一個文件夾FILE_ACTION_RENAMED_OLD_NAME行動被解僱,我能夠得到該文件夾​​的舊名稱。但我想要獲取該文件夾的舊名稱和新名稱。 是否可以直接使用ReadDirectoryChangesW使用ReadDirectoryChangesW重命名文件夾後獲取舊名稱和新名稱C++

我的C++代碼是

ReadDirectoryChangesW (hDir, (LPVOID)&strFileNotifyInfo, 
      sizeof(strFileNotifyInfo), 
      TRUE, 
      FILE_NOTIFY_CHANGE_DIR_NAME, 
      &dwBytesReturned, 
      NULL, 
      NULL) 

回答

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); 

我希望這會對您有所幫助。

+0

如果當前位置是'renamed-from',那麼保證'NextEntryOffset'成員是新名字嗎? nextEntryOffset不是0還有其他情況嗎?我一直無法找到nextEntryOffset不是0的其他時間,只是爲了重命名,所以我只是想確定一下。 – Noitidart

相關問題