Tres tipos de archivos utilizados para lectura y escritura (E/S) en Delphi
1. Tipo de archivo Pascal antiguo
Tipos de archivos representados por variables de archivos antiguos, como F:text, F:File. Se definen tres categorías: con tipo, sin tipo, tipo de carácter y algunas funciones de operación de archivos de Delphi. Por ejemplo: AssignPRn, Writeln, estas clases de archivos son similares a Windows. El identificador de archivo es incompatible
2. Identificador de archivo de Windows (identificador)
El identificador de archivo Pascal orientado a objetos encapsula el tipo de identificador de archivo de Windows y la biblioteca de funciones de operación de archivos encapsula la función API de Windows. Por ejemplo, "Fileread" llama a la función API de Windows "ReadFile". Si está familiarizado con la API de Windows, puede utilizar declaraciones de archivos de Windows para realizar operaciones con archivos.
3. Flujos de archivos
La secuencia de archivos es una instancia de objeto de la clase TFileStream. La secuencia de archivos es un tipo de operación de archivos de alto nivel. TFileStream proporciona un atributo de identificador. Este atributo se puede utilizar para operar tipos de identificadores de archivos de Windows.
Cómo elegir un tipo de archivo
El identificador de archivos de Windows es un tipo de operación de archivos de nivel inferior que proporciona un control flexible de lectura y escritura de archivos sincrónicos y asincrónicos. A continuación se proporciona una descripción en pseudocódigo de la sincronización de archivos y la operación asincrónica utilizando el tipo de identificador de archivos de Windows.
Operaciones sincrónicas:
bResultado = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
// comprueba si hay eof
si (bResultado && nBytesRead == 0, ) {
// estamos al final del archivo
}
Operaciones asincrónicas:
// configurar campos de estructura superpuestos
gOverLapped.Offset = 0;
gOverLapped.OffsetHigh = 0;
gOverLapped.hEvent = NULL;
// intenta una operación de lectura asincrónica
bResultado = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead,
&gSuperpuestas);
// si hubo un problema o la operación asíncrona aún está pendiente...
si (!bResultado)
{
// lidiar con el código de error
cambiar (dwError = GetLastError())
{
caso ERROR_HANDLE_EOF:
{
// llegamos al final del archivo
//durante la llamada a ReadFile
// código para manejar eso
}
caso ERROR_IO_PENDING:
{
// la E/S asíncrona todavía está en progreso
// hacer otra cosa por un tiempo
IrHacerAlgoMás() ;
// comprobar los resultados de la lectura asincrónica
bResultado = GetOverlappedResult(hFile, &gOverlapped,
&nBytesRead, FALSO);
// si hubo un problema...
si (!bResultado)
{
// lidiar con el código de error
cambiar (dwError = GetLastError())
{
caso ERROR_HANDLE_EOF:
{
// llegamos al final del archivo
archivo durante la operación asincrónica
}
// lidiar con otros casos de error
}
}
} // fin del caso
// lidiar con otros casos de error
} // finaliza el cambio
} // terminar si
Aunque los identificadores de archivos de Windows proporcionan un control de archivos flexible, se debe escribir más código de manejo de errores.
Si no está familiarizado con la API de Windows, utilice el tipo de variable de archivo antiguo recomendado por Delphi.
El antiguo tipo de archivo de Delphi usa AssignFile para asociar variables de archivo con archivos físicos, definidos por Delphi
Varias operaciones en variables de archivos para completar el acceso y la operación de archivos. Fácil de usar A continuación se proporciona la clase de variable de archivo.
Descripción del código de operación del tipo:
var
F: Archivo de texto;
S: cuerda;
comenzar
si OpenDialog1.Execute entonces {Mostrar cuadro de diálogo Abrir}
comenzar
AssignFile(F, OpenDialog1.FileName); {Archivo seleccionado en el cuadro de diálogo}
Reiniciar(F);
Readln(F, S); {Leer la primera línea del archivo}
Edit1.Text := S; { Poner cadena en un control TEdit }
CerrarArchivo(F);
fin;
fin;
File stream es una subclase de stream (clases de flujo), por lo que una ventaja de usarlo es que puede heredar automáticamente las propiedades de su clase principal. Puede interoperar fácilmente con otras clases de flujo, por ejemplo, si desea escribir una clase dinámica. bloque de memoria En el disco, puede usar un TFileStream y un TMemoryStream para completar.