Três tipos de arquivos usados para leitura e gravação (E/S) em Delphi
1. Tipo de arquivo pascal antigo
Tipos de arquivo representados por variáveis de arquivo antigas, como F:text, F:File. Três categorias são definidas: digitado, não digitado, tipo de caractere e algumas funções de operação de arquivo Delphi. Por exemplo: AssignPRn, Writeln, essas classes de arquivo são semelhantes ao Windows. O identificador de arquivo é incompatível
2. Identificador de arquivo do Windows (identificador)
O identificador de arquivo Pascal orientado a objetos encapsula o tipo de identificador de arquivo do Windows e a biblioteca de funções de operação de arquivo encapsula a função API do Windows. Por exemplo, "Fileread" chama a função API do Windows "ReadFile". Se você estiver familiarizado com a API do Windows, poderá usar instruções de arquivo do Windows para executar operações de arquivo.
3. Fluxos de arquivos
Um fluxo de arquivo é uma instância de objeto da classe TFileStream. Um fluxo de arquivo é um tipo de operação de arquivo de alto nível. Este atributo pode ser usado para operar tipos de identificador de arquivo do Windows.
Como escolher um tipo de arquivo
O identificador de arquivo do Windows é um tipo de operação de arquivo de nível inferior que fornece controle flexível de leitura e gravação de arquivos síncronos e assíncronos. A seguir, é fornecida uma descrição em pseudocódigo da sincronização de arquivos e da operação assíncrona usando o tipo de identificador de arquivo do Windows:
Operações síncronas:
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL);
// verifica se há eof
if (bResult && nBytesRead == 0, ) {
// estamos no final do arquivo
}
Operações assíncronas:
// configura campos de estrutura sobrepostos
gOverLapped.Offset = 0;
gOverLapped.OffsetHigh = 0;
gOverLapped.hEvent = NULO;
//tenta uma operação de leitura assíncrona
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead,
&gSobrepostos);
// se houve algum problema ou a operação assíncrona ainda está pendente...
if (!bResult)
{
//lida com o código de erro
opção (dwError = GetLastError())
{
caso ERROR_HANDLE_EOF:
{
//chegamos ao final do arquivo
//durante a chamada para ReadFile
//código para lidar com isso
}
caso ERROR_IO_PENDING:
{
// E/S assíncrona ainda está em andamento
//faça outra coisa por um tempo
GoDoSomethingElse();
// verifica os resultados da leitura assíncrona
bResult = GetOverlappedResult(hFile, &gOverlapped,
&nBytesRead, FALSE);
//se houve algum problema...
if (!bResult)
{
//lida com o código de erro
opção (dwError = GetLastError())
{
caso ERROR_HANDLE_EOF:
{
//chegamos ao final do arquivo
arquivo durante operação assíncrona
}
//lida com outros casos de erro
}
}
} // fim do caso
//lida com outros casos de erro
} // fim da chave
} // fim se
Embora os identificadores de arquivo do Windows forneçam controle de arquivo flexível, mais código de tratamento de erros deve ser escrito.
Não familiarizado com a API do Windows, use o antigo tipo de variável de arquivo recomendado pelo Delphi.
O antigo tipo de arquivo do Delphi usa AssignFile para associar variáveis de arquivo a arquivos físicos, definidos pelo Delphi
Várias operações em variáveis de arquivo para completar o acesso e operação do arquivo. Fácil de usar.
Digite a descrição do código de operação:
var
F: Arquivo de texto;
S: corda;
começar
if OpenDialog1.Execute then {Exibir caixa de diálogo Abrir}
começar
AssignFile(F, OpenDialog1.FileName); {Arquivo selecionado na caixa de diálogo }
Redefinir(F);
Readln(F, S); { Lê a primeira linha do arquivo }
Edit1.Text := S; {Coloque string em um controle TEdit }
FecharArquivo(F);
fim;
fim;
Fluxo de arquivo é uma subclasse de fluxo (classes de fluxo), portanto, uma vantagem de usá-lo é que ele pode herdar automaticamente as propriedades de sua classe pai. Ele pode interoperar facilmente com outras classes de fluxo, por exemplo, se você quiser escrever uma classe dinâmica. bloco de memória No disco, você pode usar um TFileStream e um TMemoryStream para completar.