Russian Qt Forum
Ноябрь 27, 2024, 08:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ReadDirectoryChangesW() работает с UNC-путями? Либо с сетевыми дисками?  (Прочитано 3968 раз)
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 есть такое:
Цитировать
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.
В посте Нужен алгоритм пишут:
Цитировать
"Я проверял только на сетевом диске с NTFS. Там ReadDirectoryChangesW работал."

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

VS 2008
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Август 08, 2011, 13:28 »

Сетевой диск и самба шара - вещи разные:)
Записан
malor
Гость
« Ответ #2 : Август 08, 2011, 13:39 »

Программу запускаю в WinXP SP3VMware Player 3.1.4), в качестве сетевого диска "Z:" подключена расшаренная папка основной Windows XP SP3.
ФС - NTFS.



Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Август 08, 2011, 13:50 »

возможно вмварьные шары не поддерживают эту фичу? на обычной шаре пробовали?
Записан
malor
Гость
« Ответ #4 : Август 08, 2011, 16:56 »

>>на обычной шаре пробовали?

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

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

Или перенастроить VMware Player 3.1.4 по другому?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.14 секунд. Запросов: 22.