FindFirstFileEx
На конеретном примере. С это FindFirstFile разобрался а вот на FindFirstFileEx
не хватает мозгов) Вразумите кто-нить. MSDN и Google не предлагать.
2. Когда ты мне объяснишь как относится FindFirstFileEx к Низкоуровневому программированию, тогда и поговорим.
3. Недостаток мозгов на форуме не восполнишь
4. Не знаю что такое MSDK, а здесь есть описание
5. Да ищи хоть в яндексе, так как...
Ну,а если не предлагать вышеозвученные,могу предложить Яндекс (=
Неужели в MSDN нет примеров?Не верю
Ещё можно скачать AIP giude,там должен быть
Посмотрел в MSDN.Там есть пример+описание(Во дела!Ни фига себе!:eek:) функции со всеми её параметрами и пр.
Может,за вас это описание надыбать?Или там программу сразу написать?
1. Нах?
Нужно найти файл в определенной дерриктории.
2. Когда ты мне объяснишь как относится FindFirstFileEx к Низкоуровневому
программированию, тогда и поговорим.
Я мог бы ответить на этот вопрос, но ты и сам знашье ответ)
3. Недостаток мозгов на форуме не восполнишь
А зачем нужен форум?
4. Не знаю что такое MSDK, а здесь есть описание
Извеняюсь MSDN . Почему ты думаешь, что до того как задать вопрос, я не побывал там?
HANDLE WINAPI FindFirstFileEx(
__in LPCTSTR lpFileName, ;Здесь нужно указать путь к файулу 'D:/file/text.txt'
__in FINDEX_INFO_LEVELS fInfoLevelId, ; Признаюсь сразу, не понял че отменя хотят.
__out LPVOID lpFindFileData, Указатель на буфер предпологаю, что нужно сделать так lpFindFileData DWORD 8 dup(0) или так lpFindFileData WIN32_FIND_DATA <>, точно не знаю но наверно Второй вариант
__in FINDEX_SEARCH_OPS fSearchOp, ;Какойто тип фильтрации. Не очень понятно
__reserved LPVOID lpSearchFilter, ;Критерии поиска, они мне ваще не нужны, ставил ноль
__in DWORD dwAdditionalFlags Флаг. ;С эти вродебы нет проблем сделал так- FIND_FIRST_EX_CASE_SENSITIVE
);
5. Да ищи хоть в яндексе, так как...
Google на эту тему не выдает ничего полезного. Есть только примеры с FindFirstFile и все.
@pixo $oft
Да... Там есть пример на C++ но я внем только поверхностно разбираюсь. Не могу сопоставить с ассемблером, вот и прошу помощи.
Я даже снизойду до[Highlight=CPP]void _tmain(int argc, TCHAR *argv[]) //Это точка входа.Умеешь такое на Ассемблере?
{
WIN32_FIND_DATA FindFileData; //Это объявление переменных указанных типов
HANDLE hFind; //Если что,то HANDLE==DWord
if( argc != 2 ) //Проверка на количество переданных программе аргументов.Т.к. программа из командной строки берёт,что искать,то…
{
_tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]); //Типа вывод справки,если аргументов <2
return;
}
_tprintf (TEXT("Target file is %s\n"), argv[1]);
hFind = FindFirstFileEx(argv[1], FindExInfoStandard, &FindFileData,
FindExSearchNameMatch, NULL, 0); //Вот,собственно,и вызов функции
if (hFind == INVALID_HANDLE_VALUE) //Вах!Не удалось найти файлики.Как сравнивать на Ассемблере и откуда брать константы,тоже подсказать?
{
printf ("FindFirstFileEx failed (%d)\n", GetLastError()); //Вывод сообщения об ошибке
return;
}
else
{
_tprintf (TEXT("The first file found is %s\n"),
FindFileData.cFileName); //УРА!!!Нашли!Вывод имени найденного файла
FindClose(hFind); //Конец поиску
}
}[/Highlight]Если как следует поискать на этой странице,то можно найти ссылки на enum'ы(не знаю,как их по-русски звать:)).Они там специально большими буквами написаны,да-да!
Так-то.Посещение учебных заведений различной степени тяжести в достаточном количестве доставляет,я гарантирую это!
P.S.Phodopus-то не знает,что такое MSDK,но мы-то с тобой знаем,правда?Это же MicroSoft Development Krowten!..или Ketworn,вот точно не помню
Спасибо конечно, что все расписал, но из всего этого мне не понятно только это
Я так понял что *argv[], что это и есть указатель на имя файла.
invoke FindFirstFileEx, addr разобрался, Не разобрался, addr разобрался,Не разобрался,0,0
FindExInfoStandard как её объявить? ( FindExInfoStandard DWORD ? )
или FindExInfoStandard FINDEX_INFO_LEVELS <>
FindExSearchNameMatch как её объявить?
Я тоже не на программиста,но,тем не менее,"программером ты можешь и не быть,но гугл пользовать обязан"!
По делу:ладно,так и быть,помогу тебе по доброте сердечной и душевной(сам таким был…вроде как;))
Неа,это указатель на командную строку,ту самую,что получается с помощью GetCommandLine.Если быть точнее,то это указатель на массив аргументов(ведь их может быть несколько,а сишный рантайм нам их представляет в удобном виде–разобрав поштучно:))
FindExInfoStandard как её объявить? ( FindExInfoStandard DWORD ? )
или FindExInfoStandard FINDEX_INFO_LEVELS <>
FindExSearchNameMatch как её объявить?
Это enum'ы(т.е. список значений,пронумерованных от 0(или 1?Знающие,подскажите,пожалуйста)).Вот список значений для FINDEX_INFO_LEVELS и для FINDEX_SEARCH_OPS
Т.е.,как ты можешь наблюдать,между фигурными скобками заключён списко значений(это константы,по сути) .1я константа имеет значение 0,2я–1,и т.д.На Ассемблере это будет так:[Highlight=Asm]FindExInfoStandard Equ 0
FindExInfoBasic Equ 1
FindExInfoMaxInfoLevel Equ 2[/Highlight](список значений для FINDEX_INFO_LEVELS) и [Highlight=Asm]FindExSearchNameMatch Equ 0
FindExSearchLimitToDirectories Equ 1
FindExSearchLimitToDevices Equ 2[/Highlight]Эти значения будешь подставлять вместо твоих "Не разобрался"
Даже обидно, что я убил на это 2 дня :D
Так как в google такой случай найти сложно, хочу исправить этот беспредел и выложу примерчик для тех, кто пойдет по моим стопам.
.586p
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\Kernel32.inc
includelib \masm32\lib\Kernel32.lib
.data
FindExSearchLimitToDirectories Equ 1
lpFileName db 'D:\1\*.txt',0
lpFileName2 db 'D:\1\Phodopus.txt',0 ; Это чтобы не парится и не поставлять вместь (*) имя найденного файла
; проcто для примера
hFile dd 0
.data?
lpFindFileData WIN32_FIND_DATA <> ; Тут должно быть все понятно. Здесь сохранится то что мы найдем.
;Имя файл можно бутет извлечь так lpFindFileData.cFileName
.code
start:
invoke FindFirstFileEx, addr lpFileName,FindExSearchLimitToDirectories,addr lpFindFileData,FindExSearchLimitToDirectories,0,0 ;Ищем файл
mov hFile,eax ;Хендл файла
cmp eax,INVALID_HANDLE_VALUE
je exit
exit:
; здесь нужно было бы написать функцию которая вставила бы м есто (*) имя найденного
; файла lpFileName db 'D:\1\*.txt',0
;но это я оставлю вам
;А сам сделаю проще lpFileName2 db 'D:\1\Phodopus.txt',0
invoke DeleteFile,addr lpFileName2
invoke ExitProcess,0
end start