Russian Qt Forum

Программирование => С/C++ => Тема начата: malor от Август 08, 2011, 12:53



Название: ReadDirectoryChangesW() работает с UNC-путями? Либо с сетевыми дисками?
Отправлено: malor от Август 08, 2011, 12:53
В коде функция ReadDirectoryChangesW() возвращает ноль:
Код
C++ (Qt)
#define pathDir                "Z:\\"
 
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
   HANDLE hDir = CreateFile(_T(pathDir),                        // pointer to the file name
                           FILE_LIST_DIRECTORY,                // access (read/write) mode
                           FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,  // share mode
                           NULL,                               // security descriptor
                           OPEN_EXISTING,                      // how to create
                           FILE_FLAG_BACKUP_SEMANTICS,         // file attributes    (FILE_FLAG_OVERLAPPED)
                           NULL);                              // file with attributes to copy
 
 
   const DWORD dwNotificationFlags = FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_FILE_NAME;
   FILE_NOTIFY_INFORMATION Buffer[1024];
   DWORD BytesReturned;
   VOID *pBuf = (BYTE*)&Buffer;    
 
   while (ReadDirectoryChangesW(hDir,                     // handle to directory
                                &Buffer,                  // read results buffer
                                sizeof(Buffer),           // length of buffer
                                TRUE,                     // monitoring option
                                dwNotificationFlags,
                                &BytesReturned,           // bytes returned
                                NULL,                     // overlapped buffer
                                NULL))                       // completion routine
 
   {
       FILE_NOTIFY_INFORMATION* pInfo = (FILE_NOTIFY_INFORMATION*) pBuf;
       SelectAction(pInfo);
 
   }
   dwError = GetLastError();    
   CloseHandle(hDir);
   return 0;
}
GetLastError() выдает, что код ошибки
ERROR_INVALID_FUNCTION  Incorrect function.

На MSDN ReadDirectoryChangesW Function (http://msdn.microsoft.com/en-us/library/aa365465%28v=vs.85%29.aspx) есть такое:
Цитировать
Return Value
If the function fails, the return value is zero. To get extended error information, call GetLastError.

If the network redirector or the target file system does not support this operation, the function fails with ERROR_INVALID_FUNCTION.
В посте Нужен алгоритм (http://www.delphimaster.net/view/14-90649) пишут:
Цитировать
"Я проверял только на сетевом диске с NTFS. Там ReadDirectoryChangesW работал."

Как заставить работать ReadDirectoryChangesW()?

VS 2008


Название: Re: ReadDirectoryChangesW() работает с UNC-путями? Либо с сетевыми дисками?
Отправлено: Авварон от Август 08, 2011, 13:28
Сетевой диск и самба шара - вещи разные:)


Название: Re: ReadDirectoryChangesW() работает с UNC-путями? Либо с сетевыми дисками?
Отправлено: malor от Август 08, 2011, 13:39
Программу запускаю в WinXP SP3VMware Player 3.1.4), в качестве сетевого диска "Z:" подключена расшаренная папка основной Windows XP SP3.
ФС - NTFS.

(http://s43.radikal.ru/i100/1108/f0/f0a11a1ac351.jpg)

(http://s49.radikal.ru/i126/1108/65/1768c0ab7f3e.jpg)


Название: Re: ReadDirectoryChangesW() работает с UNC-путями? Либо с сетевыми дисками?
Отправлено: Авварон от Август 08, 2011, 13:50
возможно вмварьные шары не поддерживают эту фичу? на обычной шаре пробовали?


Название: ReadDirectoryChangesW() работает с UNC-путями? Либо с сетевыми дисками?
Отправлено: malor от Август 08, 2011, 16:56
>>на обычной шаре пробовали?

Нашел комп с расшаренной папкой в локалке. Примаунтил в виде диска "Z" (действия -  в host-Windows). Функция ReadDirectoryChangesW() запустилась нормально.

>>возможно вмварьные шары не поддерживают эту фичу?

Или перенастроить VMware Player 3.1.4 по другому?