Склеивание файлов. BlockRead, BlockWrite. Delphi
В английской раскладке: crktbdfybt afqkjd. blockread, blockwrite. delphi
В русской раскладке: склеивание файловю идщслкуфвб идщслцкшеую вудзрш
| Рубрика Программирование | Дата 06-03-2011
761 | Оцените статью
0
Разберем простейший пример работы с нетипизированными файлами в Delphi. А именно попробуем склеить несколько файлов.
Для начала создадим интерфейс для нашей программы.

Свяжем PopupMenu1 с FileList. И для PopupMenu1 создадим кнопки.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Добавить файл procedure TForm1.AddFileToListClick(Sender: TObject); begin if OpenDialog1.Execute then FileList.Items.Add(OpenDialog1.FileName); end; // Удалить файл procedure TForm1.DeleteFileFromListClick(Sender: TObject); begin FileList.DeleteSelected; end; // Заменить файл procedure TForm1.ReplaceFileFromListClick(Sender: TObject); begin if OpenDialog1.Execute then FileList.Items[FileList.ItemIndex]:=OpenDialog1.FileName; end; |
На функции склеивания файлов остановимся и разберем её более тщательно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | procedure TForm1.GlueFilesClick(Sender: TObject); var SaveFile, OpenFile : File; // Файл для записи и текущего файла для чтения. Bytes : Array[0..4096] of Byte; // Массив байтов, количество элементов кратно кластеру. I, Count : Integer; // Счетчик файлов и переменная для количества считанных байтов. begin if SaveDialog1.Execute then begin // Запускаем диалог AssignFile(SaveFile, SaveDialog1.FileName); // Связываем файл для записи ReWrite(SaveFile, 1); // Открываем файл для записи for I := 0 to FileList.Count - 1 do // Пробегаем по файлам из списка begin AssignFile(OpenFile, FileList.Items[i]); // Связываем файл для чтения Reset(OpenFile, 1); // Открываем файл для чтения repeat BlockRead(OpenFile, Bytes, 4096, Count); // Считываем 4КБ в массив Bytes и записываем в Count количество реально считанных байтов. BlockWrite(SaveFile, Bytes, Count); // Записываем считанные Count байтов until Count=0; // Как только писать нечего выходим из цикла CloseFile(OpenFile); // Закрываем текущий файл для чтения. end; CloseFile(SaveFile); // Закрываем текущий файл для записи. end; end; |
Даже не знаю где это может понадобиться, но помогает чуть лучше разобраться с нетипизированными файлами, хотя то только начинающему.

