Olá, seja bem-vindo de volta.
Nesta palestra, eu quero falar sobre o posicionamento do arquivo, basicamente algumas funções
que permitirão a você para alterar a posição de um arquivo.
Então, para muitos aplicativos, você vai precisa ser capaz de acessar dados em
um arquivo diferente da ordem sequencial.
A ordem sequencial está começando no início e, em
seguida, byte a byte até o final.
Isso nem sempre é útil porque você pode realmente querer ir até o
meio de um arquivo e obter dados ou em o final do arquivo e pegue os dados.
Tudo depende do aplicativo.
Você nem sempre quer ir Do começo ao fim.
Portanto, existem várias funções que você pode usar para acessar
dados em sequência aleatória.
Existem dois aspectos de posicionamento de arquivo.
Um é descobrir onde você estão em um arquivo e o outro está se movendo
para um determinado ponto em um arquivo.
Essas são realmente as duas coisas que você quer saber quando você
está falando sobre arquivos e o posicionamento de um arquivo, para o que está realmente apontando.
Novamente, onde você está no arquivo em si e se você deseja mover
para outro lugar no arquivo.
Então você pode acessar o arquivo em uma posição aleatória, independentemente de você abrir
o arquivo, você pode mover seu parceiro de arquivo.
Você não precisa abrir o arquivo para alterar onde você está para alterar
para ver onde você está.
Então, descobrir onde você está vamos falar sobre primeiro.
Você tem duas funções para encontrar onde você está em um arquivo.
É chamado ftel e um é chamado fgetpos, posição fget.
Para ftell, a função real a definição é bastante direta.
Você volta junto e você pega um ponteiro de arquivo.
E esta função vai aceitar um ponteiro de arquivo como um
argumento e ele retornará o inteiro longo valor que especifica a posição do caractere
no arquivo, por isso é vou te dizer a posição.
Você pode usá-lo criando um variável neste caso fpos, que vai para o que vai
conseguir retornado e, em seguida, passando esse ponteiro
de arquivo e chamando ftel.
A variável de posição f agora se mantém a posição atual no
arquivo e você pode usá-la para retornar ao posição em qualquer momento subsequente.
Então, isso vai te devolver a posição.
Esta é a maneira que você pode obter a posição do ponto atual para
o qual você está apontando.
O valor é o deslocamento em bytes desde o início do arquivo.
Então, é muito simples de use o passe em seu ponteiro;
ele vai retornar e dizer onde estão em seu arquivo com base basicamente no
início do arquivo até quantos bytes desde o início.
Portanto, neste exemplo, estamos criando um ponteiro de arquivo chamado fp e estamos criando
um inteiro chamado comprimento.
Vamos abrir o arquivo, e isso seria apenas para leitura.
Nós vamos fazer certeza de que não é nulo.
Se for, nós vamos para retornar um erro.
E então não se preocupe com o fseek.
O fseek está realmente indo para ir para o final do arquivo.
Essa é outra função que nos ajuda.
Eu só estou usando para demonstrar o ftel.
Fseek vai até o fim do arquivo, e então
você vai dizer ftell fp, e isso vai para dizer que você basicamente estará no
final do arquivo.
Então, o link que é retornado está no final do arquivo.
E então o que vai acontecer é vai retornar o
tamanho total do arquivo com base no comprimento porque você realmente moveu o ponteiro para o
final e então você disse onde estou e disse que você está no
fim, então devolva o fim.
E o final é o número de bytes de quando você leu pela última vez.
Então, vamos dar uma olhada nisso por dentro de nosso bom IDE, nossos blocos de código.
Então aqui está nosso exemplo de codificação onde criamos nosso ponteiro de arquivo.
Nós o definimos como null, make certeza de que não é nulo.
Tentamos abri-lo.
E então fazemos um fseek que é apenas vai mudar o nosso ponteiro de arquivo.
Ftel vai nos dizer para onde estamos apontando.
Então, isso vai apontar para o final e terá qualquer número
de bytes até o final.
Quando executamos isso, o que você está fazendo notar que ele exibe 24 bytes.
Isso significa que você está no final do porque o arquivo é um arquivo
pequeno e contém apenas 24 bytes.
Normalmente, você usará ftel após você escreveu ou leu ou depois de escrever
em fseek para onde você se mudou para algum lugar.
Mas é muito simples chamar ftel com o ponteiro do arquivo e
depois len apenas informa onde você está.
Você também pode usar o fget posição ou função fgetpos.
E esta é uma segunda função fornecendo informações sobre a posição
atual do arquivo.
É um pouco mais complicado do que ftel.
Isso retorna um número inteiro.
Leva um ponteiro de arquivo e também assume o tipo t posição f.
Portanto, o primeiro parâmetro é esse ponteiro de arquivo, para que você
saiba em qual arquivo precisa ler.
O segundo parâmetro é um ponteiro para um tipo que é definido em standardio. h.
O tipo t posição f é capaz de registre cada posição dentro de um arquivo.
Portanto, a função de posição fget é projetado para ser
usado quando a função de posicionamento definir a posição.
Então você usa a posição fset e então você usa a posição fget
em combinação com isso.
Portanto, a função de posição fget armazena a posição atual e
informações de estado do arquivo para o arquivo e posicionar
e retornar zero se a operação for bem-sucedida, retorna um valor inteiro diferente de zero para falha.
Então você pode criar um variável do tipo de posição s.
E aqui dizemos que está apenas aqui.
Então chamamos de posição fget.
Nós especificamos em nosso ponteiro de arquivo, e especificamos em nosso tipo de posição f.
Temos que passar no e comercial, o endereço de porque não é um ponteiro.
Então, neste caso, o atual a posição do arquivo está na
variável hello ou aqui.
Então você tem que declarar uma variável do tipo f posição t porque
é isso que você passa em seu parâmetro, seu segundo parâmetro.
Você pode declarar um ponteiro do digite f posição t estrela porque
não haverá nenhuma memória associado para armazenar os dados de posição.
Então, vamos ver um exemplo isso fará muito mais sentido.
Neste caso, criamos nosso arquivo ponteiro, criamos nossa posição de tipo de
posse t, chamamos de aberto e então chamamos de posição fget.
E passamos em nosso arquivo ponteiro em nossa posição final.
Então é aí que estamos armazenar a posição.
Nós vamos conseguir o posição em que estamos.
Então, quando dizemos f put s, estamos gravando alguns dados para onde
quer que nos mudemos.
Então, novamente, consigo posição e ftell diz onde você deseja realmente escrever
ou ler.
Está em algum lugar no meio.
Não é no começo, não está no fim.
Você está se movendo.
Você geralmente se move com uma busca ou seu movimento com outra coisa,
pegue a posição e que diz onde você está.
Então, localize a posição e veja vai te dizer exatamente para onde você está
apontando, e que significa que você pode ir para outro lugar
e poderá ler.
Agora definindo uma posição em um arquivo até este ponto, estamos
apenas lendo onde estamos.
Nós não vamos realmente ler em onde estamos, a menos que
definamos algo, fizemos uma leitura e uma escrita.
Então, como um complemento para bem, você também tem fseek.
E fseek vai permitir que você mude para algum lugar para sua posição.
Ele retorna um int.
Ele retorna um ponteiro de arquivo, um longo fset e um original inteiro.
O primeiro parâmetro é um ponteiro para o arquivo que você está reposicionando.
O segundo e terceiro parâmetros definem onde você deseja ir no arquivo.
O segundo parâmetro é um deslocamento onde um ponto
de referência especificado pelo terceiro parâmetro.
O ponto de referência pode ser um de três valores
que você especificou pelos nomes predefinidos.
Buscar conjunto, buscar corrente e buscar fim.
Conjunto de busca define o início do arquivo.
Seek cur define o atual a posição no arquivo e a busca final
define o final do arquivo.
Então, para um arquivo em modo texto, o segundo argumento deve ser um
valor retornado por ftel.
Então você deve notar que com fseek e ftel, eles são usados juntos.
Portanto, o terceiro argumento para o texto os arquivos de modo devem ser definidos para busca.
Para arquivos de texto, todas as operações com fseek são realizados com referência
ao início do arquivo para arquivos binários sobre os quais realmente
não aprendemos muito.
Mas para arquivos binários, o O argumento de deslocamento é simplesmente
uma contagem relativa de bytes.
Você pode, portanto, fornecer valores positivos ou negativos para
o deslocamento quando a referência ponto é especificado como buscar cur.
Então, vamos ver um exemplo.
Aqui neste exemplo, novamente, fazemos os fputs.
Então, escrevemos alguns dados para o nosso arquivo, e então usamos fseek.
Fseek vai mover você.
Aqui está dizendo que você é vamos mover sete bytes e usamos o
conjunto de busca para dizer que queremos mover para algum lugar basicamente
sete bytes desde o início.
E podemos passar do início do arquivo por
sete bytes que vai movê-lo.
Depois de sete bytes, podemos então realmente gravar dados nele.
E também seríamos capazes de use ftell para ver que oh depois de
sete bytes onde estamos.
Você pode usar as informações para recupere de onde você está.
Novamente, todo o ponto do fseek e o fgets é que você está vendo
onde está localizado para especificar onde você deseja escrever ou ler.
Então, fseek s vai realmente mover a posição, tell vai dizer
onde você está localizado.
A posição Fset também é como fseek.
Mas a posição fset é um um pouco mais complicado.
Irá com a posição fset.
Então fset get get position também é muito semelhante à posição fset.
Com a posição fset, especifica o primeiro parâmetro como um ponteiro
para o arquivo aberto.
O segundo parâmetro é um ponteiro do tipo t posição f.
A posição que é armazenada no endereço
foi obtido contendo a posição fget.
Assim, a posição fset tem seu arquivo ponteiro e, em seguida, sua variável real.
E a variável aqui era anteriormente definido por uma chamada para a posição fget.
Novamente, você vai usar fset e fget juntos.
A posição fset retorna um valor diferente de zero em caso de erro ou
zero quando for bem-sucedido.
Esta função foi projetada para trabalhar com um valor que
é retornado pela posição fget.
Então você só pode usá-lo para chegar a um número em um arquivo para obter um lugar no arquivo
que você já esteve.
Fseek permite que você vá a qualquer posição apenas especificando o
deslocamento apropriado.
Então aqui parece que temos nossa posição f posição do tipo t.
Abrimos nosso arquivo e então chamamos de posição fget.
Na posição fget, estamos especificando onde queremos mover
o ponteiro, onde estamos realmente ler ou escrever no arquivo.
Então usamos fputs para para onde quer que o mudemos.
E então a posição fset vai novamente defina algo especificamente onde queremos
escrever e, em seguida, escreva de onde quisermos.
Então, com todas essas funções, você deseja realmente ver para onde está
apontando.
Isso se tornará muito mais fácil de entender uma vez que temos nosso desafio.
Então, com leitura e escrita, você sempre quer ir para algum lugar a
ponto de escrever
Você nem sempre quer escrever para o começo ou o fim.
E então essas funções são muito útil para mover para onde você deseja
posicionar em qualquer lugar em um arquivo.
Obrigada