Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2016, 22:55   #1
Xchel
Пользователь
 
Регистрация: 24.03.2016
Сообщений: 13
По умолчанию Как искать только exe файлы в этой программе?

Код:
uses Dos,crt;
type
a=array[1..16] of byte;
const
signature:a=($85,$3E,$1C,$00,$00,$57,$68,$80,$3B,$D3,$4A,$E8,$E3,$F4,$FF,$FF);
var
f:file;
block:byte;

procedure FindSign(findFile:string);
var i:integer;

begin
assign(f,findFile);
{$I-}
reset(f,1);
{$I+}

if IOResult<>0 then
begin
writeln(findFile,' -  ошибка доступа к файлу');
exit;
end;
if (filesize(f)>=400000) then begin close(f); exit; end;
i:=1;
while not EOF(f) do
begin
blockread(f,block,1);
if block=signature[i] then
begin
if i=16 then
begin
writeln(findFile,' - NAIDENA SIGNATURA');
exit;
end
else i:=i+1;
end
else i:=1;
end;
close(f);
end;

procedure FileFind(Dir:string;FindName:string);
var
SRec,srec1:SearchRec;

begin
FindFirst(Dir+FindName,AnyFile,SRec);
while DosError=0 do
begin
with SRec do

if Attr and (VolumeID+Directory)=0 then
begin
FindSign(Dir+Name);
end;
FindNext(SRec);
end;

FindFirst(Dir+'*.*',Directory or ReadOnly or Hidden or SysFile, SRec1);
while DosError=0 do

begin
writeln(srec1.name);
writeln(dir+srec1.name);
if (srec1.Attr and Directory <> 0) and (srec1.Name[1] <> '.') then

FileFind(Dir+srec1.Name+'/',FindName);

FindNext(SRec1);
end;

end;

begin
FileFind('c:/progra~1/','*.*');
writeln('poisk okonchen, enter');
readln;
end.

Последний раз редактировалось Аватар; 25.03.2016 в 23:20.
Xchel вне форума Ответить с цитированием
Старый 25.03.2016, 22:59   #2
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Код:
FileFind('c:/progra~1/','*.exe');
vlad1389 вне форума Ответить с цитированием
Старый 26.03.2016, 12:05   #3
Xchel
Пользователь
 
Регистрация: 24.03.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от vlad1389 Посмотреть сообщение
Код:
FileFind('c:/progra~1/','*.exe');
если бы так просто.. Знаю, что eсли первые два байта MZ, то это файл EXE. Кто-нибудь может написать примерно код, как проверить файл exe или нет?
Xchel вне форума Ответить с цитированием
Старый 26.03.2016, 18:05   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,311
По умолчанию

Например так:
1. - Создать файловую переменную текстового типа
2. - Составить список исследуемых файлов
3. - Получить указатель на первый/следующий файл из списка
4. - Прочитать первую строку
5. - Проверить, на равенство первых двух байт сигнатуре: 4D5A
6. - Если нет, то закрыть указатель и перейти к п. 3
7. - Если да, то имя файла поместить в новый список
8. - Вывести новый список на экран.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 26.03.2016, 18:13   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что за бред? Если у вас есть путь/имя файла, то вы можете проверить его имя без чтения содержимого файла.

А почему вы решили, что FindFirst(.... + '*.exe', ...) не будет работать?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.03.2016, 18:25   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,311
По умолчанию

Да почему бред?
Дело в том что, как понятно из последнего сообщения, "Вася" расширение файла изменил на ...

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 26.03.2016, 22:59   #7
Xchel
Пользователь
 
Регистрация: 24.03.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Например так:
1. - Создать файловую переменную текстового типа
2. - Составить список исследуемых файлов
3. - Получить указатель на первый/следующий файл из списка
4. - Прочитать первую строку
5. - Проверить, на равенство первых двух байт сигнатуре: 4D5A
6. - Если нет, то закрыть указатель и перейти к п. 3
7. - Если да, то имя файла поместить в новый список
8. - Вывести новый список на экран.


Как-то так, ...
А можете хоть примерно код написать? Никак не соображу...
Xchel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Как в этой программе поменять способ ввода текста? Xchel Помощь студентам 2 25.03.2016 16:18
как в этой программе использовать меню через метки Danteeee Помощь студентам 5 26.11.2014 19:12
как составить блок-схему к этой программе??? owert Паскаль, Turbo Pascal, PascalABC.NET 1 05.06.2013 17:25
как подключить к основной программе файл с частью этой программы??? program2001 Паскаль, Turbo Pascal, PascalABC.NET 4 17.06.2011 15:09
FindFirst - как искать ВСЕ файлы? iskurt Общие вопросы C/C++ 3 18.06.2010 23:23