Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ReadDirectoryChangesW(): работает с UNC путями ? Либо с сетевыми дисками? 
:(
    Опции темы
malor
  Дата 8.8.2011, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



В коде функция ReadDirectoryChangesW() возвращает ноль:
Код
#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 работал."

Взаимодействие 2 компьютеров, организовать одинаковые каталоги на 2 компах
Цитата
"эту задачу можно решить на WinAPI (ReadDirectoryChangesW), если на втором компьютере использовать расшаренный ресурс."

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

VS 2008

Это сообщение отредактировал(а) malor - 8.8.2011, 10:05
PM MAIL   Вверх
xvr
Дата 8.8.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Видимо ваш Z: не поддерживает отслеживание файловых операций. Z: - это кто?

Добавлено через 36 секунд
Кстати, в hDir не INVALID_HANDLE_VALUE случайно?

PM MAIL   Вверх
malor
  Дата 8.8.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



hDir  равен 0x00000fb4.

>>Видимо ваш Z: не поддерживает отслеживание файловых операций. Z: - это кто?

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

user posted image

user posted image
PM MAIL   Вверх
xvr
Дата 8.8.2011, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Т.е. это у вас сетевая ФС из VMWare. Попробуйте поиграться настройками в самой VMWare - похоже проблемы не Windows, а в VMWare

PM MAIL   Вверх
malor
  Дата 8.8.2011, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



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

>>Попробуйте поиграться настройками в самой VMWare ...

Какие только.
PM MAIL   Вверх
xvr
Дата 8.8.2011, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(malor @  8.8.2011,  15:47 Найти цитируемый пост)
Нашел комп с расшаренной папкой в локалке. Примаунтил в виде диска "Z" (действия -  в host-Windows). Функция ReadDirectoryChangesW() запустилась нормально.

Тут важно, не кто монтирует, а куда монтируют. В случае с VMWare монтируют именно к нему, а в случае с сетевым диском в локалке - монтируют к Win, которая расшарила этот самый диск.

Цитата(malor @  8.8.2011,  15:47 Найти цитируемый пост)
Какие только. 

Увы, не в курсе - с VMWare давно не игрался  smile 

PM MAIL   Вверх
malor
  Дата 8.8.2011, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Настроил как Bridged и заработало.
user posted image

Спасибо!

Это сообщение отредактировал(а) malor - 8.8.2011, 19:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.