Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1105568578
nachinaushiy
2005-01-13 01:22
2005.01.30
Помогите кто-нибудь....


14-1105536426
Ajax
2005-01-12 16:27
2005.01.30
Значок окна консоли


1-1105691044
Zilog
2005-01-14 11:24
2005.01.30
Можно ли текстоввый файл запихнуть в DLL?


3-1103906893
Russko
2004-12-24 19:48
2005.01.30
Paradox в InterBase


14-1105268512
Andryk
2005-01-09 14:01
2005.01.30
Кто-нибудь уже попробовал технологию ECO?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский