Три типа файлов, используемые для чтения и записи (I/O) в Delphi
1. Старый тип файла Pascal.
Типы файлов, представленные старыми файловыми переменными, такими как F:text, F:File, определены три категории: типизированные, нетипизированные, символьные и некоторые функции работы с файлами Delphi. Например: AssignPRn, Writeln, эти классы файлов аналогичны классам файлов Windows. Дескриптор файла несовместим
2. Дескриптор файла Windows (дескриптор)
Объектно-ориентированный дескриптор файла Pascal инкапсулирует тип дескриптора файла Windows, а библиотека функций операций с файлами инкапсулирует функцию Windows API. Например, «Fileread» вызывает функцию Windows API «ReadFile», предоставляющую интерфейс операции Windows API. вы знакомы с Windows API, вы можете использовать файловые операторы Windows для выполнения файловых операций.
3. Файловые потоки
Файловый поток — это экземпляр объекта класса TFileStream. Файловый поток — это тип файловой операции высокого уровня. Этот атрибут можно использовать для работы с типами дескрипторов файлов Windows.
Как выбрать тип файла
Дескриптор файла Windows — это тип файловой операции нижнего уровня, который обеспечивает гибкое синхронное и асинхронное управление чтением и записью файла. Ниже представлено псевдокодовое описание синхронизации файлов и асинхронной операции с использованием типа дескриптора файла Windows:
Синхронные операции:
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
// проверяем наличие eof
if (bResult && nBytesRead == 0, ) {
// мы в конце файла
}
Асинхронные операции:
// устанавливаем перекрывающиеся поля структуры
gOverLapped.Offset = 0;
gOverLapped.OffsetHigh = 0;
gOverLapped.hEvent = NULL;
// попытка асинхронной операции чтения
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead,
&gПерекрытие) ;
// если возникла проблема или асинхронная операция еще не завершена...
если (!bResult)
{
// работа с кодом ошибки
переключатель (dwError = GetLastError())
{
случай ERROR_HANDLE_EOF:
{
// мы достигли конца файла
//во время вызова ReadFile
// код для обработки этого
}
случай ERROR_IO_PENDING:
{
// асинхронный ввод-вывод все еще продолжается
// делаем что-то еще какое-то время
GoDoSomethingElse() ;
// проверяем результаты асинхронного чтения
bResult = GetOverlappedResult(hFile, &gOverlapped,
&nBytesRead, FALSE) ;
// если возникла проблема...
если (!bResult)
{
// работа с кодом ошибки
переключатель (dwError = GetLastError())
{
случай ERROR_HANDLE_EOF:
{
// мы достигли конца файла
файл во время асинхронной операции
}
// обработка других случаев ошибок
}
}
} // конец регистра
// обработка других случаев ошибок
} // конечный переключатель
} // конец, если
Хотя дескрипторы файлов Windows обеспечивают гибкое управление файлами, необходимо написать больше кода обработки ошибок.
Не знакомы с Windows API, используйте старый тип файловой переменной, рекомендованный Delphi.
Старый тип файлов Delphi использует AssignFile для связи переменных файла с физическими файлами, определенными Delphi.
Различные операции с файловыми переменными для обеспечения доступа к файлам и работы с ними. Простота в использовании. Ниже представлен класс файловых переменных.
Описание кода операции типа:
вар
Ф: Текстовый файл;
С: строка;
начинать
if OpenDialog1.Execute then {Отобразить диалоговое окно открытия}
начинать
AssignFile(F, OpenDialog1.FileName {Файл, выбранный в диалоговом окне});
Сброс(Ф);
Readln(F, S); { Прочитать первую строку из файла }
Edit1.Text := S; { Помещаем строку в элемент управления TEdit }
ЗакрытьФайл(F);
конец;
конец;
Файловый поток является подклассом потока (классов потока), поэтому одним из преимуществ его использования является то, что он может автоматически наследовать свойства своего родительского класса. Например, если вы хотите написать динамический поток. блок памяти. На диск вы можете использовать TFileStream и TMemoryStream для завершения.