![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Вставить операторы для чтения из файла источника и записи в файл приемникСтр 1 из 5Следующая ⇒
Лабораторная работа №8 Работа с файлами Задание: Разработать приложение в среде Delphi, реализующие работу с файлами 4-мя способами: через файловые переменные, с использованием функций Windows API, c использование файловых потоков и с помощью файлов, отображаемых на память. Для всех способов доступа использовать один и тат же файл, одинаковый размер блока данных. Определить время, затрачиваемое программой на обработку файла (результат вывести в поле мемо). Ход обработки файла отобразить с помощью элемента Progress Bar. При нажатии на кнопку старт последовательно выполняются только отмеченные пользователем тесты. Почему полученные результаты могут меняться? Предложите способ корректного измерения результатов и реализуйте его (подсказка: посмотреть функцию GetThreadTimes).
Отображение файлов на память: function TfrmFileTest.CopyByMapping: Integer; Type TBuf=array[0..1024-1] of Byte; PBuf=^TBuf; Var i, SrcSize: ULONG; hSrc, hDst: THandle; ptrIn, ptrOut: Pointer; hMapFileIn, hMapFileOut: THandle; BPI, BPO: PBuf; Start, Finish: TDateTime; Begin if FileExists(DestinationFileName) then DeleteFile(DestinationFileName); Start: =GetTime; hSrc: =CreateFile(PAnsiChar(SourceFileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); hDst: =CreateFile(PAnsiChar(DestinationFileName), GENERIC_WRITE or GENERIC_READ, FILE_SHARE_WRITE, nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); SrcSize: =GetFileSize(hSrc, nil); prbStatus.Max: =SrcSize div 1024; hMapFileIn: =CreateFileMapping(hSrc, nil, PAGE_READONLY, 0, 0, nil); hMapFileOut: =CreateFileMapping(hDst, nil, PAGE_READWRITE, 0, SrcSize, nil); ptrIn: =MapViewOfFile(hMapFileIn, FILE_MAP_READ, 0, 0, 0); ptrOut: =MapViewOfFile(hMapFileOut, FILE_MAP_WRITE, 0, 0, SrcSize);
BPI: =PBuf(ptrIn); BPO: =PBuf(ptrOut); for i: =1 to SrcSize div 1024 do Begin BPO^: =BPI^; Inc(BPO); inc(BPI); prbStatus.Position: =i; Application.ProcessMessages; end;
UnmapViewOfFile(ptrIn); UnmapViewOfFile(ptrOut); CloseHandle(hMapFileIn); CloseHandle(hMapFileOut); CloseHandle(hSrc); CloseHandle(hDst);
Finish: =GetTime; CopyByMapping: =MilliSecondsBetween(Start, Finish);
prbStatus.Position: =0; end;
Использование Windows API: function TfrmFileTest.CopyByWindowsAPI: integer; Var hSrc, hDst: THandle; FileSize: ULONG; Buf: array[0..1024-1]of Byte; i: Integer; Start, Finish: TDateTime; Begin
if FileExists(DestinationFileName) then DeleteFile(DestinationFileName); Start: =GetTime; hSrc: =CreateFile(PAnsiChar(SourceFileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); hDst: =CreateFile(PAnsiChar(DestinationFileName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); FileSize: =GetFileSize(hSrc, nil); prbStatus.Max: =FileSize div 1024;
for I: =1 to FileSize div 1024 do Begin вставить операторы для чтения из файла источника и записи в файл приемник prbStatus.Position: =i; Application.ProcessMessages; end;
CloseHandle(hSrc); CloseHandle(hDst);
Finish: =GetTime; CopyByWindowsAPI: =MilliSecondsBetween(Start, Finish);
prbStatus.Position: =0;
end;
Использование файловых потоков: (Реализовать самостоятельно)
Использование файловых переменных: (Реализовать самостоятельно)
Генерация тестового файла: procedure TfrmFileTest.CreateTestFile; var i, FileLen: integer; F: TFileStream; Buf: array[0..1023]of byte; Begin FileLen: = StrToInt(txtFileSize.Text); prbStatus.Max: =FileLen*1024; F: =TFileStream.Create(SourceFileName, fmCreate); for i: =1 to FileLen*1024 do begin F.Write(Buf, 1024); prbStatus.Position: =i; Application.ProcessMessages; end; F.Free; end;
Среда Delphi предоставляет возможность выбрать один из четырех вариантов работы c файлами: · использование традиционного набора функций работы с файлами, унаследованного от Turbo Pascal; · использование функций ввода/вывода из Windows API; · использование потоков (TStream и его потомки); · использование отображаемых файлов.
|