比如移进一个文件夹到监控的目录,其中文件数量大于两个,但是得到的信息只有两个。请各位大虾帮帮忙!
代码如下:
#define   _WIN32_WINNT   0x0500
#define _UNICODE
#define UNICODE
#include<windows.h>
#include<TCHAR.h>
#include<stdio.h>
#include<stdlib.h>
#include<winbase.h>#define BUF_SIZE    128*1024HANDLE hDirectory;
TCHAR tempPath[2*1024];
TCHAR path[2*1024];int main(void)
{
DWORD size;
PFILE_NOTIFY_INFORMATION pFNI;
    char buf[BUF_SIZE]; hDirectory = CreateFile(
_T("D:\\dirChange"),                            // pointer to the file name
FILE_LIST_DIRECTORY,                // access (read/write) mode
FILE_SHARE_READ|FILE_SHARE_DELETE,  // share mode
NULL,                               // security descriptor
OPEN_EXISTING,                      // how to create
FILE_FLAG_BACKUP_SEMANTICS,         // file attributes
NULL                                // file with attributes to copy
); if(INVALID_HANDLE_VALUE == hDirectory)
{
printf("invalid directory!\n");
}
    while(1)
    {
memset(buf, 0, sizeof(buf));
        if(!ReadDirectoryChangesW(hDirectory, buf, BUF_SIZE, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME, 
            &size, NULL, NULL) || GetLastError() == ERROR_INVALID_HANDLE)
        {
printf("error!\n");
            break;
        }
MessageBox(NULL, _T("get!"), _T("移进加密路径的文件"), MB_OK);
        pFNI = (PFILE_NOTIFY_INFORMATION)buf;
if(pFNI->Action == FILE_ACTION_ADDED)
{
//pFNI->FileName没有终结符,这里得用mencpy向tempPath写入后就有终结符了
memset(tempPath, 0, sizeof(tempPath));
memcpy( tempPath, pFNI->FileName, pFNI->FileNameLength );
memset(path, 0, sizeof(path));
wsprintf(path, _T("D:\\dirChange\\%s"),tempPath);
MessageBox(NULL, path, _T("移进加密路径的文件"), MB_OK);
}
    }
CloseHandle(hDirectory);
}