поиск файлов (путь и маска)

Тема в разделе "WASM.BEGINNERS", создана пользователем test896, 29 май 2009.

  1. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    Привет всем!

    FindFirstFileA 'c:\*',0
    так работает
    а если использовать unicode то как будет выглядеть
    путь с маской?
     
  2. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    С 8-42 так и не нашёл? Странно... Наверно всё обижаешся :)
    Для начала пойми что UNICODE - двухбайтная кодировка и описывается dw:
    szPath dw 'c',':','\',0
    Но с русским шрифтом этот фокус не проканает.
    Для masm есть куча макросов, например l.inc:
    szPath WCHAR L(<Text\0>) ;с этим макросом русский тоже не канает

    То что тебе писали
    - Сишный формат
    Как и в макросах masm \ означает что за ним идёт спец символ (например \n перевод каретки),
    поэтому и пишут \\
     
  3. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    MirrorBlack
    не тот возраст чтоб обижаться у меня...

    А уже понял что unicode это 2 байта, просто все варианты в строке путь+маска перепробывал , не работает что-то,говорит путь не найден,
    (англ не знаю и си тоже , поэтому примеры в инете трудны для понимания)
     
  4. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    MirrorBlack
    Да , забыл,
    я пробывал создать каталог на диске с максимальным именем в длину,
    создался 256 символов включаю имя диска, почему не может больше Винда?
    Она же работает с юникоде ты сказал
     
  5. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    test896
    И сейчас не работает???
     
  6. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    прям сейчас я уже не пробывал
     
  7. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    test896
    Если есть проблеммы - выкладывай исходники (гадать трудно).
    Боюсь ошибиться, но ты случаем не на FASM пишеш?
    Если да, от меня помощи мало будет. Вот masm другое дело.
    Есть класный сайт http://vsokovikov.narod.ru
    Автор переплюнул Коперфильда :) создал сайт msdn на русском.
    Чтоб искалось проще, в yandex вводиш ключевые слова поиска.
    Например: vsokovikov CreateFile
     
  8. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Заббыл упомянуть не менее интересный сайт:
    http://www.firststeps.ru/
     
  9. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    на FASM
     
  10. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    http://vsokovikov.narod.ru
    с этим я общаюсь часто
     
  11. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    'c:\*.*' или '\\c:\*.*' или, может, '\\c\*.*' ?
     
  12. test896

    test896 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2009
    Сообщения:
    132
    привет.
    Тема такая при вызове 'c:\*',0 все работает, только попадаются несколько файлов в имени файла и в пути встречаются англ и русские символы и спец символы, после попытки открыть их на чтение выходит ошибка eax=7bh Invalid File Name
     
  13. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Не забывайте про поле TWIN32FindDataA.cAlternateFileName по нему можно обратиться к файлу, даже содержащему иероглифы в своём имени (естественно перед этим нужно прибавить путь к файлу).

    Прога для вывода информации через FindFileA и FindNextFileA (мало ли кому-нибудь пригодиться).

    Код (Text):
    1. Var
    2.   hFind: THandle;
    3.   s: string;
    4.   p: pchar;
    5.   FD: TWIN32FindDataA;
    6.   c: cardinal;
    7.  
    8. begin
    9.   hFind := FindFirstFileA('D:\1\*.*', FD);
    10.   Repeat
    11.     c := cardinal(FindNextFileA(hFind, FD));
    12.     IF (c = 0) or (c = ERROR_NO_MORE_FILES) then Break;
    13.     p := FD.cFileName;
    14.     s := ''''+string(p)+''''#13#10;
    15.     p := FD.cAlternateFileName;
    16.     s := s + ''''+string(p)+''''#13#10;
    17.     Writeln(s);
    18.   Until false;
    19.   Readln;
    20.   Windows.FindClose(hFind);
    21. end.
    Для вывода и работы с Unicod'ом соответственно - FindFileW и FindNextFileW.
     
  14. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    slavanap
    Ага, а потом будут вопросы - почаму виснет.
    Есть 2 структуры - WIN32_FIND_DATAA и WIN32_FIND_DATAW.
    Отличаются параметрами cFileName и cAlternateFileName. В случае A это BYTE, в случае W это WORD.
     
  15. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    MirrorBlack
    массив из byte и массив из word
     
  16. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    MirrorBlack
    что-то я не совсем понимаю, что требуется.
     
  17. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    slavanap
    Ты сказал про смену функций на W, но не сказал про смену структуы.
     
  18. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    MirrorBlack,
    Думал, это очевидно...)
     
  19. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    slavanap
    Увы нет.
    В том же masm описана всего одна структура WIN32_FIND_DATA, кторая по "счастливому" совпадению равна WIN32_FIND_DATAA