Работа с виртуальными папками и файлами

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

17 май 2005, 18:13

Да, кстати, нашёл ошибку у тебя в коде. Плохо копировал из MDSN :) Завершающий ноль тоже нужно копировать:

...
pidlNew = (LPITEMIDLIST)g_pMalloc->Alloc(cb1 + cb2 + sizeof(SHORT));
...
CopyMemory(((LPSTR)pidlNew) + cb1, pidlFolder, cb2 + sizeof(SHORT));
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

17 май 2005, 18:38

Изначально идет путь фолдера, а потом ребенок.
Так ?
Все равно что-то не пашет.
А через винду каким-то образом можно скопировать :( .
В SAD - все в SAD.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

18 май 2005, 01:57

Romeo, нет GetSize() из примера MSDN учитывает концевые нули.

Kolinus, поменяй порядок:

Код: Выделить всё

  CopyMemory(pidlNew, pidlFolder, cb1); 
  CopyMemory(((LPSTR)pidlNew) + cb1, pidlChild, cb2);
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

18 май 2005, 11:16

Точно, просмотрел, времени было мало. Действительно в неправильном порядке копируется. Если будет возвращаться неправильный результат и после этого фикса, то напиши код ошибки. Это многое прояснит.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

18 май 2005, 15:46

Поменял и так и этак.
Делал и с нулями и без.
Возвращает всегда ложь.
GetLastError() ничего не дает :( .
Что еще посоветуете ? :)
В SAD - все в SAD.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

18 май 2005, 16:49

SHGetPathFromIDList очень простая функция, чтобы ошибка лежала слишком глубоко. ИМХО, всего 2 варианта: 1) буфер мал; 2) путь не существует. А уж что там на самом деле - тебе виднее ;)
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

18 май 2005, 17:27

Размер буфера 2560 - вряд ли мало.
а насчет не существует - через виндовый эксплорер я их могу скопировать.
Или может такое быть что через эксплорер копируются, а программно - нет??
В SAD - все в SAD.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

18 май 2005, 17:38

Есть ещё вариант: такого файла на диске не существует - он виртуальный.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

18 май 2005, 17:39

Возможно.
Но ведь виндой-то я его могу вытянуть. Вот что меня ставит в тупик. :(
В SAD - все в SAD.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

19 май 2005, 12:48

Такой вопрос: а код
hr=folder->QueryInterface(IID_IPersistFolder2,(void**)&pf);
LPITEMIDLIST pidlFolder;
hr=pf->GetCurFolder(&pidlFolder);
возвращает полный или относительный пидл в фолдер?
че-то я в МСДНе этого не углядель :(
В SAD - все в SAD.
Ответить