Привет всем! FindFirstFileA 'c:\*',0 так работает а если использовать unicode то как будет выглядеть путь с маской?
С 8-42 так и не нашёл? Странно... Наверно всё обижаешся Для начала пойми что UNICODE - двухбайтная кодировка и описывается dw: szPath dw 'c',':','\',0 Но с русским шрифтом этот фокус не проканает. Для masm есть куча макросов, например l.inc: szPath WCHAR L(<Text\0>) ;с этим макросом русский тоже не канает То что тебе писали - Сишный формат Как и в макросах masm \ означает что за ним идёт спец символ (например \n перевод каретки), поэтому и пишут \\
MirrorBlack не тот возраст чтоб обижаться у меня... А уже понял что unicode это 2 байта, просто все варианты в строке путь+маска перепробывал , не работает что-то,говорит путь не найден, (англ не знаю и си тоже , поэтому примеры в инете трудны для понимания)
MirrorBlack Да , забыл, я пробывал создать каталог на диске с максимальным именем в длину, создался 256 символов включаю имя диска, почему не может больше Винда? Она же работает с юникоде ты сказал
test896 Если есть проблеммы - выкладывай исходники (гадать трудно). Боюсь ошибиться, но ты случаем не на FASM пишеш? Если да, от меня помощи мало будет. Вот masm другое дело. Есть класный сайт http://vsokovikov.narod.ru Автор переплюнул Коперфильда создал сайт msdn на русском. Чтоб искалось проще, в yandex вводиш ключевые слова поиска. Например: vsokovikov CreateFile
привет. Тема такая при вызове 'c:\*',0 все работает, только попадаются несколько файлов в имени файла и в пути встречаются англ и русские символы и спец символы, после попытки открыть их на чтение выходит ошибка eax=7bh Invalid File Name
Не забывайте про поле TWIN32FindDataA.cAlternateFileName по нему можно обратиться к файлу, даже содержащему иероглифы в своём имени (естественно перед этим нужно прибавить путь к файлу). Прога для вывода информации через FindFileA и FindNextFileA (мало ли кому-нибудь пригодиться). Код (Text): Var hFind: THandle; s: string; p: pchar; FD: TWIN32FindDataA; c: cardinal; begin hFind := FindFirstFileA('D:\1\*.*', FD); Repeat c := cardinal(FindNextFileA(hFind, FD)); IF (c = 0) or (c = ERROR_NO_MORE_FILES) then Break; p := FD.cFileName; s := ''''+string(p)+''''#13#10; p := FD.cAlternateFileName; s := s + ''''+string(p)+''''#13#10; Writeln(s); Until false; Readln; Windows.FindClose(hFind); end. Для вывода и работы с Unicod'ом соответственно - FindFileW и FindNextFileW.
slavanap Ага, а потом будут вопросы - почаму виснет. Есть 2 структуры - WIN32_FIND_DATAA и WIN32_FIND_DATAW. Отличаются параметрами cFileName и cAlternateFileName. В случае A это BYTE, в случае W это WORD.
slavanap Увы нет. В том же masm описана всего одна структура WIN32_FIND_DATA, кторая по "счастливому" совпадению равна WIN32_FIND_DATAA