使用ReadDirectoryChangesW捕获到了发生改变的文件名,谁知道如何获得文件的绝对地址?问题解决即给分。别的方法也行。

解决方案 »

  1.   

    ReadDirectoryChangesW的第一个参数是HANDLE hDirectory,你再得到这个hDirectory的时候不就知道了目录的路径,目录路径+文件名不就是绝对路径
      

  2.   

    你的handle不是通过路径名得到的?
      

  3.   

    代码如下:
    CFileWatchDlg *obj=(CFileWatchDlg*)lParam;
    obj->strWatchDir="F:\\文档";
    obj->hDir=CreateFile(
    obj->strWatchDir,
    GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_DELETE|FILE_SHARE_READ|FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    FILE_FLAG_BACKUP_SEMANTICS,
    NULL
    );
    if(obj->hDir==INVALID_HANDLE_VALUE)
    return false;
    char buf[1024];
    FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION*)buf;
    DWORD dwByteReturned;
    while(true)
    {
    if(::ReadDirectoryChangesW(obj->hDir,
    &buf,
    sizeof(buf),
    true,
    FILE_NOTIFY_CHANGE_FILE_NAME|
    FILE_NOTIFY_CHANGE_CREATION|
    FILE_NOTIFY_CHANGE_DIR_NAME|
    FILE_NOTIFY_CHANGE_ATTRIBUTES|
    FILE_NOTIFY_CHANGE_SIZE|
    FILE_NOTIFY_CHANGE_LAST_WRITE|
    FILE_NOTIFY_CHANGE_LAST_ACCESS,
    &dwByteReturned,
    NULL,
    NULL))
    {
    char tmp[MAX_PATH];
    memset(tmp,0,sizeof(tmp));
    WideCharToMultiByte(CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL); }
    }
    handle是通过obj->hDir=CreateFile的到了,如果在f:\文档下的某个文件夹里创建了一个文件ABC,怎么获得ABC的绝对路径。事先不知道文件夹名。