Programação c: como acessar os arquivos armazenados no armazenamento aleatório

acesso de arquivo aleatório em programação C não tem nada a ver com números aleatórios. Em vez disso, o arquivo pode ser acessado em qualquer ponto para cá, para lá, e até mesmo yon. Este tipo de acesso funciona melhor quando o arquivo é pontilhada com os registros do mesmo tamanho. A noção de registros traz estruturas, que podem ser facilmente escritos para um arquivo e, em seguida, pegou de volta individualmente, seletivamente, ou todos de uma vez.

Como ler e rebobinagem

Como seu programa lê dados de um arquivo, ele mantém o controle da posição a partir de dados onde é lido no arquivo. A posição do cursor é mantido de modo que o local em que o código está lendo ou gravando em um arquivo não está perdida.

Video: Me Salva! Programação em C - PLC18 - Arquivos - Introdução

Quando você abre um arquivo, a posição do cursor está no início do arquivo, o primeiro byte. Se você ler um registro de 40 bytes na memória, a posição do cursor é de 40 bytes desde o início. Se você ler até o final do arquivo, a posição do cursor mantém esse local também.

Para manter as coisas confusas, a posição do cursor é muitas vezes referida como um ponteiro de arquivo, mesmo que ele não é uma variável ponteiro ou um tipo de arquivo de ponteiro. É simplesmente a localização dentro de um arquivo onde o próximo byte de dados é lido.

Você pode mexer com a posição do cursor usando várias funções interessantes em C. Dois deles são ftell () e rewind (). A função ftell () retorna a posição do cursor atual que está deslocamento como um valor int longo. A função rewind () move o cursor para o início do arquivo.

O loop while em Tell e Rewind lê registros do arquivo bond.db. Na linha 28, a função ftell () retorna a posição do cursor. Se for maior do que uma entrada (o que significa que a segunda entrada foi lido), a posição do cursor é reposto para o início do arquivo pela função rewind () na Linha 29.

DIGA e retroceder

 #include #include #include int main () {entrada struct {char ator [32] -int título ano-char [32] -} - struct entrada ligação-FILE * contagem A007-int = 0-A007 (= fopen"bond.db","r") -se (! A007) {puts ("SPECTRE ganha!") -exit (1) -} enquanto (fread (&ligação, sizeof (struct entrada), 1, A007)) {printf ("% R% dt% sn", Bond.actor, bond.year, bond.title) -se (ftell (A007) gt; sizeof (struct entrada)) rebobinagem (A007) -count ++ - se (countgt; 10)} break fclose (A007) -Retornar (0) -}

Para determinar a adequada compensação, uma declaração se compara o resultado da função e sizeof operador ftell () na entrada estrutura. Tenha em mente que ftell () simplesmente retorna um valor int tempo, não um número específico de estruturas.

Video: Programação em C/C++ - Aula 20 - Arquivos - Agenda

A contagem variável, declarada e inicializada na Linha 14, mantém o controle de quantas vezes se repete loop while. Se isso não aconteceu, o programa iria repetir indefinidamente. Isso é ruim. Então, quando o valor de contagem é maior que 10, as quebras de loop e, em seguida, o arquivo fecha e o programa termina.

Exercício 1: Digite o código-fonte de contar e Rewind em seu editor. Construir e correr para ver como as funções ftell () e rewind () operam.

Como encontrar um registro específico



Quando um arquivo contém registros de todas do mesmo tamanho, você pode usar a função fseek () para arrancar qualquer item individual. O formato para fseek () é

fseek (manusear, compensados, de onde) -

lidar com é um identificador de arquivo, um ponteiro de arquivo representa um arquivo que está aberto para leitura. compensar é o número de bytes a partir do início, final, ou a posição corrente em um arquivo. E de onde é uma das três constantes: SEEK_SET, SEEK_CUR, ou SEEK_END para o início, a posição actual, ou o fim de um ficheiro, respectivamente.

Enquanto o seu arquivo contém registros de um tamanho constante, você pode usar fseek () para arrancar qualquer registro específico, como mostrado na Encontrar um registro específico em um arquivo.

ENCONTRE um registro específico em um arquivo

Video: Ler arquivo e armazenar em uma struct

#include #include #include int main () {entrada struct {char ator [32] -int título ano-char [32] -} - struct entrada ligação-FILE * A007-A007 = fopen ("bond.db","r") -se (! A007) {puts ("SPECTRE ganha!") -exit (1) -} fseek (A007, sizeof (struct entrada) * 1, SEEK_SET) -fread (&ligação, sizeof (struct entrada), 1, A007) -printf ("% R% dt% sn", Bond.actor, bond.year, bond.title) -fclose (A007) -Retornar (0) -}

O código mostrado na Encontrar um registro específico em um arquivo é novamente bastante semelhante ao código mostrado na Listagem 22-9. A grande adição é a função fseek (), mostrada na linha 21. A posição do cursor de modo a que a função fread () que se segue (referem-se a linha 22) lê um registo específico localizado no interior da base de dados.

Na Linha 21, a função fseek () examina o arquivo representado pelo A007 alça. O desvio é calculado multiplicando-se o tamanho da estrutura de entrada.

Tal como acontece com uma matriz, multiplicando esse tamanho por um produz o segundo registro no file- multiplicar o valor por 0 (ou apenas especificar 0 na função) para ler o primeiro registro. A constante SEEK_SET garante que fseek () começa a olhar a partir do início do arquivo.

O efeito líquido do código é que o segundo registro no arquivo bond.db é exibida.

Exercício 2: Digite o código-fonte do Localizar um registro específico em um arquivo. Construir e correr para ver o segundo registro no arquivo.


Publicações relacionadas