Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизОстановка проверки на идентичность Найти похожие ветки
← →
WhiteGuy © (2005-01-17 16:34) [0]Здорово, Мастера!
Я ображаюсь вот чего:
Раньше я задавал вопрос о том, как проверить два файла на идентичность. Так вот, товарищ begin...end мне написал:var
// Имена файлов
FileName1, FileName2: String;
// Потоки, с помощью которых можно читать из файлов
FileStream1, FileStream2: TFileStream;
// Указатели на буферы, в которых будут очередные куски данных из файлов
Buffer1, Buffer2: Pointer;
// Размер каждого буфера
// Над размером нужно хорошо подумать
BufferSize: Integer;
// Количество считанных байт на очередном проходе
// Вообще-то эти переменные должны быть равны, но так... на всякий случай...
BytesCount1, BytesCount2: Integer;
// Переменная, указывающая на идентичность файлов
Ident: Boolean;
begin
FileStream1 := TFileStream.Create(FileName1, fmShareDenyNone);
FileStream2 := TFileStream.Create(FileName2, fmShareDenyNone);
if FileStream1.Size <> FileStream2.Size then
begin
// До свидания, размеры неодинаковые
FileStream1.Free;
FileStream2.Free
end
else
begin
BufferSize := {здесь хорошо думаем};
// Выделяем память для буферов
GetMem(Buffer1, BufferSize);
GetMem(Buffer2, BufferSize);
try
repeat
BytesCount1 := FileStream1.Read(Buffer1^, BufferSize);
BytesCount2 := FileStream2.Read(Buffer2^, BufferSize);
if BytesCount1 = BytesCount2 then
// Непосредственно сравнение кусочков
Ident := CompareMem(Buffer1, Buffer2, BufferSize);
until (not Ident) or (BytesCount1 < BufferSize) or (BytesCount2 < BufferSize);
finally
// Что бы ни случилось, освобождаем драгоценную память
FileStream1.Free;
FileStream2.Free;
FreeMem(Buffer1, BufferSize);
FreeMem(Buffer2, BufferSize)
end
end
end.
Так вот - как зделать, чтобы по нажатию, например, Эск выскакивала форма с двумя кнопками "Продолжить" и "Выход"? Дайте пожалуйста код, помогите нещастному чайнику!
← →
Александр Иванов © (2005-01-17 16:50) [1]Недавно был такой вопрос. Варианты:
1. Вынести все в отдельный поток.
2. Использовать глобальную переменную.
← →
WhiteGuy © (2005-01-18 13:27) [2]2Александр Иванов
А можно подсказать как, ведь я в Delphi полный новичок! (ламер 8))
← →
begin...end © (2005-01-18 15:19) [3]> [2] WhiteGuy © (18.01.05 13:27)
А что именно непонятно?
Ну, расскажу про дополнительный поток. Создаёте модуль потока (File -> New -> Other -> Thread Object), в метод Execute которого помещаете вышеприведённый код.
В основном модуле запускаете этот поток (MyThread := TMyThread.Create(False)), а по нажатию кнопки Esc (Form.OnKeyDown) приостанавливаете выполнение потока (MyThread.Suspend), затем вызываете ShowMessage, в котором спрашиваете, продолжить или отменить, и в зависимости от ответа пользователя либо полностью останавливаете выполнение потока (MyThread.Terminate), либо продолжаете его выполнение (MyThread.Resume).
И ничего очень сложного, в общем-то, нет.
---
Sorry, I"m drunk now
← →
WhiteGuy © (2005-01-18 15:33) [4]Спасибо!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c