Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FindFirstFileEx

10K
29 октября 2009 года
palevo060
144 / / 05.09.2009
Всем привет. Помогите разобраться с функией
Цитата:
invoke FindFirstFileEx


На конеретном примере. С это FindFirstFile разобрался а вот на FindFirstFileEx
не хватает мозгов) Вразумите кто-нить. MSDN и Google не предлагать.

14
29 октября 2009 года
Phodopus
3.3K / / 19.06.2008
1. Нах?
2. Когда ты мне объяснишь как относится FindFirstFileEx к Низкоуровневому программированию, тогда и поговорим.
3. Недостаток мозгов на форуме не восполнишь
4. Не знаю что такое MSDK, а здесь есть описание
5. Да ищи хоть в яндексе, так как...
7
29 октября 2009 года
@pixo $oft
3.4K / / 20.09.2006
Это почему же не предлагать?Очень даже предлагать!
Ну,а если не предлагать вышеозвученные,могу предложить Яндекс (=

Неужели в MSDN нет примеров?Не верю
Ещё можно скачать AIP giude,там должен быть

Посмотрел в MSDN.Там есть пример+описание(Во дела!Ни фига себе!:eek:) функции со всеми её параметрами и пр.
Может,за вас это описание надыбать?Или там программу сразу написать?
10K
29 октября 2009 года
palevo060
144 / / 05.09.2009
Вроде сам задавал приходится самому отвечать)
Цитата:

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++ но я внем только поверхностно разбираюсь. Не могу сопоставить с ассемблером, вот и прошу помощи.

7
29 октября 2009 года
@pixo $oft
3.4K / / 20.09.2006
Ну а подумать не?Там переводится всё весьма просто
Я даже снизойду до[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,вот точно не помню
10K
29 октября 2009 года
palevo060
144 / / 05.09.2009
К сожалению я учусь не на программиста и и поэтому не посещаю все эти заведения. Но я хочу и буду изучать это дело.
Спасибо конечно, что все расписал, но из всего этого мне не понятно только это

Я так понял что *argv[], что это и есть указатель на имя файла.

invoke FindFirstFileEx, addr разобрался, Не разобрался, addr разобрался,Не разобрался,0,0
FindExInfoStandard как её объявить? ( FindExInfoStandard DWORD ? )
или FindExInfoStandard FINDEX_INFO_LEVELS <>

FindExSearchNameMatch как её объявить?
7
29 октября 2009 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: palevo060
К сожалению я учусь не на программиста и и поэтому не посещаю все эти заведения. Но это меня не останавливает

Я тоже не на программиста,но,тем не менее,"программером ты можешь и не быть,но гугл пользовать обязан"!

По делу:ладно,так и быть,помогу тебе по доброте сердечной и душевной(сам таким был…вроде как;))

Цитата: palevo060
Я так понял что *argv[], что это и есть указатель на имя файла

Неа,это указатель на командную строку,ту самую,что получается с помощью GetCommandLine.Если быть точнее,то это указатель на массив аргументов(ведь их может быть несколько,а сишный рантайм нам их представляет в удобном виде–разобрав поштучно:))

Цитата: palevo060
invoke FindFirstFileEx, addr разобрался, Не разобрался, addr разобрался,Не разобрался,0,0
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]Эти значения будешь подставлять вместо твоих "Не разобрался"

10K
29 октября 2009 года
palevo060
144 / / 05.09.2009
Хороший ты человек @pixo $oft :) Пасиб. И кто сказал что на форуме недостаток мозгов на форуме не восполнишь)))

Даже обидно, что я убил на это 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


Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог