\\?\ и относительный путь?
От: Александр Воронин Россия [70620598]
Дата: 22.04.03 14:04
Оценка:
Добрый вечер!

Стал ковыряться с FindFirstFileW и уперся в проблему —
не удается передать маску посика с относительным путем типа "\\?\*.*" или "\\?\.\*.txt"

В первом случае поулчаю синтаксическую ошибку (LastError=123), во втором — сетевой путь не найден (LastError=3).

В МСДНе не нашлось упоминания об обязательности указания полного пути, правда примеры только с ним и показаны.

Неужели придется колдовать вокруг GetCurrentDirectoryW ?
---
wbr, Alexander Voronin
mailto:
Re: \\?\ и относительный путь?
От: Аноним  
Дата: 22.04.03 14:44
Оценка:
Здравствуйте, Александр Воронин, Вы писали:

АВ>Добрый вечер!


АВ>Стал ковыряться с FindFirstFileW и уперся в проблему -

АВ>не удается передать маску посика с относительным путем типа "\\?\*.*" или "\\?\.\*.txt"

АВ>В первом случае поулчаю синтаксическую ошибку (LastError=123), во втором — сетевой путь не найден (LastError=3).


АВ>В МСДНе не нашлось упоминания об обязательности указания полного пути, правда примеры только с ним и показаны.


АВ>Неужели придется колдовать вокруг GetCurrentDirectoryW ?


Вобще-то так и не должно работать надо указать еще и диск помоему тоесть писать надо так например L"\\\\?\\c:\\*.*"
так работать будет, надо указать на каком ей томе искать.
Re[2]: \\?\ и относительный путь?
От: Sinatr Германия  
Дата: 22.04.03 15:32
Оценка:
АВ>Стал ковыряться с FindFirstFileW и уперся в проблему -
АВ>не удается передать маску посика с относительным путем типа "\\?\*.*" или "\\?\.\*.txt"
АВ>Неужели придется колдовать вокруг GetCurrentDirectoryW ?

А>Вобще-то так и не должно работать надо указать еще и диск помоему тоесть писать надо так например L"\\\\?\\c:\\*.*"

А>так работать будет, надо указать на каком ей томе искать.

Ага, без диска — никак!
Хотя можно тем же CurrentDirectory выкрутиться (вообще-то без него — никак).
И еще — вместо "\\" в таких символьных константах можно передавать "/", тобишь вместо строки L"\\\\?\\z:\\temp\\*.*" можно передать L"//?/z:/temp/*.*", но это мелочь.

А еще, как вариант, можешь сделать функцию, которая твою строчку конвертнет (с учетом текущего пути) и уже ее передавать FindFirstFileW()...
---
ПроГLамеры объединяйтесь..
Re[3]: \\?\ и относительный путь?
От: Аноним  
Дата: 22.04.03 16:05
Оценка: -1
Здравствуйте, Sinatr, Вы писали:

S>А еще, как вариант, можешь сделать функцию, которая твою строчку конвертнет (с учетом текущего пути) и уже ее передавать FindFirstFileW()...


Причем тут текущий путь — я думаю \\?\*.* означает искать не всех дисках — значит надо написать функцию которая это разварачивает на \\?\диск1Ж\*.* .. и т.д. что на самом деле труда не составит
Re[4]: \\?\ и относительный путь?
От: Sinatr Германия  
Дата: 22.04.03 16:25
Оценка:
Привет!

А>Причем тут текущий путь — я думаю \\?\*.* означает искать не всех дисках — значит надо написать функцию которая это разварачивает на \\?\диск1Ж\*.* .. и т.д. что на самом деле труда не составит


На всех дисках? (удивленно) а разве ж такое возможно? У меня (ХРюшка хоум эдишн, 3 локальных, 2 сетевых диска) запрос по "//?/*.*" ничего не выдает (я не делаю проверок на ошибки, просто FindNext... возвращает false).

  static WIN32_FIND_DATAW wfind;
  HANDLE hfile;

  hfile=FindFirstFileW(L"//?/*.*",&wfind);
  while(FindNextFileW(hfile,&wfind)) {
    MessageBoxW(NULL,wfind.cFileName,wfind.cAlternateFileName,MB_OK);
  }
  FindClose(hfile);


Что не так?
---
ПроГLамеры объединяйтесь..
Re[5]: \\?\ и относительный путь?
От: Аноним  
Дата: 22.04.03 16:56
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Привет!


А>Причем тут текущий путь — я думаю \\?\*.* означает искать не всех дисках — значит надо написать функцию которая это разварачивает на \\?\диск1Ж\*.* .. и т.д. что на самом деле труда не составит


S>На всех дисках? (удивленно) а разве ж такое возможно? У меня (ХРюшка хоум эдишн, 3 локальных, 2 сетевых диска) запрос по "//?/*.*" ничего не выдает (я не делаю проверок на ошибки, просто FindNext... возвращает false).


S>
S>  static WIN32_FIND_DATAW wfind;
S>  HANDLE hfile;

S>  hfile=FindFirstFileW(L"//?/*.*",&wfind);
S>  while(FindNextFileW(hfile,&wfind)) {
S>    MessageBoxW(NULL,wfind.cFileName,wfind.cAlternateFileName,MB_OK);
S>  }
S>  FindClose(hfile);
S>


S>Что не так?


Извение не здержался (без обид)- я имел ввиду while(..) {} например или составить список дисков, а потом переберать.

А ошибка кстате — не верная конструкци пути (в моей транскрипции — это для особенно надоедливых и предирчивых )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.