Olá, seja bem-vindo de volta.
Nesta palestra, eu quero falar sobre como acessar arquivos.
Portanto, os arquivos no disco têm um nome e as regras para nomear os arquivos
são determinadas pelo seu sistema operacional.
Você pode ter que ajustar os nomes, dependendo do sistema operacional em que
seu programa está sendo executado.
Se o seu programa estiver rodando no Windows versus Linux, a estrutura
de diretório real também é diferente.
Então, se você usar slashers avançados ou barras invertidas, você deve
ajustar isso em seu programa.
Mas na maior parte, o os nomes têm relativamente as mesmas regras
de nomenclatura e assim por diante.
Mas existe a chance de que você teria que ajustá-lo.
Um programa faz referência a um arquivo por meio de um ponteiro de arquivo ou um ponteiro de fluxo.
Uma vez que funciona em mais do que apenas um
arquivo, você pode, na verdade, mencionamos isso antes, mas o padrão As funções IO funcionam em qualquer dispositivo.
É chamado de ponteiro de arquivo, mas realmente deve ser referido como um
ponteiro de fluxo.
Você associa um ponteiro de arquivo com um arquivo programaticamente quando
o programa é executado.
Então, o que você acaba fazendo é crie um ponteiro dentro do
seu programa, será do tipo arquivo e isso vai representar o arquivo quando você lê
e escreve nele.
Usamos esses ponteiros de arquivo como um maneira mais eficaz de realmente apontar para os arquivos em vez
de ao nome porque o nome pode ser
um pouco diferente.
O ponteiro irá representar para o que está realmente apontando.
E você pode reutilizar os ponteiros, para apontar para arquivos
diferentes em ocasiões diferentes, que, novamente, foi representado pelo nome do arquivo.
Um ponteiro de arquivo aponta para uma estrutura tipo de arquivo que representa um fluxo.
Você pode realmente ir e olhar na estrutura do arquivo para ver tudo o
que está dentro dele.
Mas contém informações como como se você deseja ler, escrever
ou atualizar o arquivo, o endereço do buffer na memória onde você está
armazenando dados, um ponteiro para a posição atual no arquivo
para a próxima operação.
Mencionamos que a posição é importante porque é onde
você está fazendo suas gravações e leituras.
E você pode definir todas essas informações dentro da estrutura usando operações
de arquivo de entrada e saída.
As operações do arquivo de entrada e saída, quando você abre um arquivo, ele
vai realmente especificar se você quer ler ou escrever.
E então você também pode mudar o posição atual usando outros métodos como busca
e assim por diante sobre o qual vamos falar.
Se você quiser usar vários arquivos simultâneo em seu programa, você
deve criar um ponteiro de arquivo para cada arquivo.
Você só pode reutilizar o arquivo ponteiro se você estiver lendo e escrevendo
em momentos diferentes.
Existe um limite para o número de arquivos que você pode ter em um momento aberto.
Você pode olhar para o limite no IO padrão, há
uma constante definida f open max it all depende novamente de qual sistema operacional
você está executando.
Mas você geralmente não quer criar e abrir uma tonelada de arquivos de uma vez.
Escrever e ler os arquivos é uma operação cara porque você está gravando
no disco rígido.
Não é tão rápido quanto escrever a memória,
por isso leva tempo e pode fazer com que seu programa para ser menos responsivo assim.
Você não quer ter 10 arquivos abertos e gravados
em 10 arquivos ao mesmo tempo.
Para abrir um arquivo, seja a primeira etapa antes
de ler e escrever.
Então você deseja associar um específico nome de arquivo
externo com um ponteiro final inteiro através de um processo referido como abrir o arquivo.
A maneira como você abre um arquivo e veja se você chama f função aberta.
Isso irá retornar o arquivo ponteiro que você pode
usar para ler e escrever.
E, novamente, o ponteiro do arquivo é vai apontar para um
arquivo externo específico que está no disco.
F open vai levar o nome do arquivo.
O f aberto é o que você tem que fazer antes de fazer qualquer leitura / escrita.
Geralmente é sua primeira operação.
E como acontece com a maioria dessas funções, eles estão todos definidos em standardio. h.
Aqui está a definição da chamada aberta.
Você verá que o retorno value é um ponteiro de arquivo,
tudo em maiúsculas, a estrutura do arquivo.
Então, tudo em maiúsculas.
Você então perceberá que é necessário um alguns parâmetros, leva um nome
e um modo e não se preocupe com isso restringir isso é apenas mais coisas C11.
Realmente leva apenas o personagem ponteiro para um nome e um modo.
O primeiro argumento da função é um ponteiro para uma
string que é o nome do arquivo, de modo que estará entre aspas duplas.
Você pode especificar o nome explicitamente ou use um ponteiro de caractere que contém o endereço
da string de caracteres.
Então, tudo isso está dizendo é que você poderia crie uma string de caracteres e
atribua-a ao texto literal e então passe a string para
a função ou você pode colocar dentro da dupla citações dentro da chamada de função.
Você pode obter o nome do arquivo por meio da linha de
comando como entrada do usuário também ou definir como uma constante o seu programa.
Se for sempre o mesmo arquivo você está lendo escrevendo para
e o nome não importa, você pode apenas se referir como uma constante.
Se o seu programa for mais flexível, pode obter informações do usuário para dizer o que você
deseja ler ou escrever.
O segundo argumento para o f aberto função é uma cadeia de caracteres que
representa o modo de arquivo.
Isso especifica o que você deseja fazer com o arquivo, se
você deseja lê-lo, se deseja escrever para , se você deseja anexar a ele.
Uma especificação de modo de arquivo é uma string
de caracteres entre aspas duplas, e vou mostrar alguns dos que
vamos acabar usando muito.
Presumindo que a chamada seja aberta for bem-sucedido, ele retornará aquele
ponteiro de arquivo, em maiúsculas.
E então você pode usar este arquivo ponteiro para chamar outras funções de entrada
/ saída no cabeçalho IO padrão, e vamos passar por eles quando
lermos e escrevermos ou você também pode obter a posição
usando esse ponteiro para alterar o posição de onde você está no arquivo.
Se o arquivo não puder ser aberto por algum motivo, f
open retornará null.
Então, o que isso significa está diante de você comece a fazer qualquer
leitura ou escrita, certifique-se de que o ponteiro não está igual a nulo, outro se verifica.
Aqui está o arquivo modos que mencionei.
Os modos de arquivo, lembre-se, são os segundo parâmetro para a chamada f open.
Isso é o que especifica o que você deseja fazer com o
arquivo, e está tudo entre aspas duplas.
Então, se você fizer um w, isso significa que você deseja para abrir o arquivo de texto para escrita.
Se você fizer um a, significa que você deseja para abrir o arquivo de texto para anexar, todas
as gravações são feitas no final do arquivo.
Se você fizer um r, ele abre o arquivo de texto para leitura.
Se você adicionar um sinal de mais a qualquer um dos estes, basicamente criará o arquivo
se ele não existir.
Então, se você abrir um arquivo w plus, irá abri-lo para atualização e irá truncar
o arquivo para zero se existe ou pode criar um novo arquivo
se não existir.
Com os outros, é vai escrever ou ler um e o arquivo
tem que existir.
Mesmo com um sinal de mais, ele vai abrir para anexar, para uma atualização, ao final
do arquivo existente ou crie o arquivo se ele não existir.
E o r plus vai abrir o arquivo de texto para
atualização, não vai criar o arquivo lá porque estará vazio.
Portanto, a leitura é apenas para ler e escrever quando você
vê r plus.
Um pouco diferente do outro vantagens onde eles estão realmente criando
o arquivo que não existe.
Modo de escrita.
Se você quiser escrever para um arquivo de texto
existente com o nome myfile. txt, você criaria o ponteiro do arquivo, em maiúsculas.
Defina-o como nulo, inicialize-o como nulo.
E então você talvez crie seu arquivo como
outro ponteiro de caractere, myfile. txt ou você poderia passe-o como o primeiro parâmetro e,
em seguida, basta dizer f abrir.
F abre o nome do arquivo e depois entra aspas duplas que abrem o arquivo para gravação
e retorna um ponteiro de arquivo.
É por isso que você tem o arquivo p à esquerda da tarefa.
Você então deseja verificar para fazer certifique-se de que o arquivo p não é igual a nulo.
Porque se for nulo, se for Falha ao abrir por
qualquer motivo, talvez o nome do arquivo esteja errado ou não existia, então você não seria capaz
de escrever para ele.
Então você sempre quer fazer o f verifique e imprima
algumas informações, caso não abra.
Este código irá abrir o arquivo e irá associar
o arquivo ao nome meuarquivo. txt com seu arquivo aponta para o arquivo fp.
O modo w significa que só podemos escrever para o arquivo, você não pode ler a partir dele.
Se um arquivo com o nome meu arquivo esse texto não
existe, a chamada para f open criará um novo arquivo
com este nome, e isso é para f aberto com a opção w.
E então, quando vimos no anterior modos, w plus criará o arquivo se não existir,
mas também trunca o arquivo para zero.
Isso é diferente com o w.
O w criará se não existe, mas não
vai truncá-lo para zero.
Portanto, esta é a forma padrão para abrindo arquivos, usando
aquele w entre aspas duplas.
Se você fornecer apenas o nome do arquivo sem nenhuma especificação
de caminho, então foi isso que fizemos neste Por exemplo, um
caminho lembrado é o nome dos diretórios.
Se você não fornecer o nome do diretórios, vai assumir que esse arquivo
está no diretório atual onde quer que o programa esteja sendo executado.
Se você realmente deseja abrir um arquivo em outro lugar
onde não esteja realmente localizado o diretório de programas, então você deve
especificar o caminho completo.
Isso é chamado de caminho absoluto.
Quando você não fornece nenhum caminho, geralmente o caminho relativo, é relativo a
onde o programa está sendo executado.
Então você pode especificar qualquer um, o absoluto ou o caminho
relativo, apenas certifique-se de saber onde ele está localizado e você está fazendo o certo.
Caminhos relativos geralmente são melhores porque então não é dependente.
Se alguém tivesse se mudado esse arquivo não depende
de para onde foi movido.
E você pode realmente fazer um caminho relativo, e você pode voltar aos
diretórios, então você pode fazer um ponto barra e isso é relativo a onde o
programa está sendo executado, você está apenas voltando alguns diretórios.
Quando você usa um absoluto caminho, seria realmente algo
como o programa c dois pontos arquivos se você estiver no Windows.
E se esse arquivo for movido, o programa não seria capaz de abri-lo.
Então, ao abrir um arquivo para escrever o link do arquivo
é truncado para zero, e a posição será no início de quaisquer dados
existentes para a primeira operação.
Quaisquer dados que eram anteriormente gravados no arquivo serão
perdidos e substituídos por quaisquer operações de gravação.
Então, novamente, sem fornecer o mais nele, significa apenas que você não
pode ler e escrever.
Isso é apenas para gravação.
W está certo apenas.
W plus significa que você pode ler e escrever.
Modo anexo.
Se você deseja adicionar a um existente arquivo de texto em vez de substituí-lo, você
pode especificar o modo a.
Isso depende.
Isso posiciona o arquivo no final de quaisquer dados gravados anteriormente.
Se o arquivo não existir, ele cria um novo.
O exemplo aqui é você apenas altere o segundo parâmetro para ser
um aspas duplas, irá adicionar ao final do meuarquivo. TXT.
E não se esqueça que você deve sempre testar o valor
de retorno para nulo todas as vezes.
Você sempre quer fazer o se O arquivo p não é igual a nulo.
Quando você abre um arquivo em append modo, todas as operações de
gravação serão no final dos dados em o arquivo em cada operação de gravação.
Todas as operações de gravação anexam dados para o arquivo,
e você não pode atualizar o conteúdo existente no neste modo, está tudo no final.
No modo de leitura, podemos abrir o arquivo para ler um arquivo.
Nós apenas usamos o r entre aspas duplas.
Isso é somente leitura, você não pode gravar no arquivo.
Se você fizesse r mais, ser capaz de ler e escrever.
Então se parece com as outras chamadas, basta fazer um f abrir, passar
o nome do arquivo e depois r duplo aspas que retornam um ponteiro de arquivo.
Também posicionaremos o arquivo para o início dos dados.
Se você vai apenas ler o arquivo, ele já deve existir.
Você não vai ler um arquivo vazio.
Portanto, não há opção de criar o arquivo não existe,
só estará vazio ou você voltaria o oponente do arquivo seria nulo.
Se você tentar abrir um arquivo para lendo não
existe, retornará o ponteiro nulo.
Se existe e está vazio, você apenas não retornará dados.
Você sempre deseja verificar o valor retorno de f aberto.
Novamente, lendo isso para o segunda vez, é importante.
Porque se for um ponteiro nulo, seu programa vai travar,
vai fazer algo ruim.
Renomeando um arquivo.
Agora sabemos como abrir um arquivo.
Abrir um arquivo é o primeiro operação, você especifica o
modo e o nome do arquivo.
Isso devolve o arquivo ponteiro que agora você pode
usar para fazer outras coisas.
Renomear um arquivo é às vezes importante.
É muito fácil.
Você acabou de usar a função de renomear.
Leva um nome antigo e um novo nome como ponteiros de
caracteres constantes e retorna um int.
O número inteiro que é retornado ser zero se a mudança
de nome foi bem-sucedida e diferente de zero caso contrário.
O arquivo não deve ser aberto quando você chama renomear.
Caso contrário, vai falhar porque está em uso, você não pode renomear um
arquivo quando ele está em uso.
Então, o que você pode fazer aqui é apenas diga renomear, passe o nome do arquivo antigo e
o novo nome do arquivo.
Neste exemplo, estamos usando um caminho para um arquivo no Windows.
E que você sabe que é janelas porque vejo dois pontos.
Você também percebe que o a barra invertida aparece duas vezes.
A razão para isso é porque o a barra invertida é um caractere especial em c.
Barra invertida n é um feedback de linha.
A barra invertida r é um retorno de carro.
Portanto, a barra invertida tem significado no programa.
Então, se você realmente quiser usar o barra invertida para um caminho em um diretório, que
é o que o Windows faz, você tem que fornecer dois deles.
E aqui estamos renomeando a myfile. txt localizando o diretório
temporário.
Nós o renomeamos para meu arquivo sublinhado cópia de. texto no diretório de tentativas.
E se isso não for igual para um, ele irá falhar.
Acabamos de imprimir um saída que diz que falhou.
Caso contrário, sua impressão foi bem-sucedida.
Isso vai mudar o nome do meuarquivo. txt no diretório temporário para a minha cópia do arquivo.
Se o caminho do arquivo estiver incorreto ou o arquivo não existe,
não será possível renomear.
Você também pode fechar um arquivo e quiser para fazer isso sempre que você abrir um arquivo.
Então, quando você terminar com o próprio arquivo, você deseja
informar ao sistema operacional para liberar esse arquivo.
Lembre-se, há um limite a quantos arquivos você
pode abrir em um determinado momento.
Você pode fazer isso chamando a função f close.
F close aceita um arquivo ponteiro como um argumento.
Lembre-se, o ponteiro do arquivo representa o arquivo.
Ele retorna um eof.
Eof é um int.
Retorna eof se ocorrer um erro.
Eof é um personagem especial chamado de caractere de fim de arquivo.
É definido em standardio. h como um número inteiro negativo.
Geralmente é equivalente para um negativo.
Se o fechamento foi bem sucedido, ele retornará zero.
Então você pode verificar eof para malsucedido.
Você acabou de dizer f fechar o ponteiro, você pode definir o ponteiro como nulo
e o resultado da chamada f fechar é que a conexão entre o
ponteiro, o arquivo p e o arquivo físico está quebrado.
O arquivo P não pode mais ser usado para acessar
o arquivo para leitura, gravação, anexação ou renomeação.
Se o arquivo estiver sendo gravado, o conteúdo atual do buffer de saída é gravado
no arquivo para certifique-se de que os dados não sejam perdidos.
Então você não tem problemas com integridade de dados, você não
vai realmente fechar o arquivo se ele estiver sendo escrito em outro tópico.
Portanto, é thread-safe.
Não falamos sobre tópicos, esse é um conceito mais avançado.
Mas é onde você pode ter vários pontos de execução em seu programa.
É uma boa prática de programação para fechar um arquivo assim que
você terminar com ele, assim como é uma boa prática
de programação para liberar memória quando você terminar com ele, o mesmo para fechar arquivos.
Ele protege contra perda de dados de saída.
Você também deve fechar um arquivo antes de
tentar renomeá-lo ou removê-lo, ele deve ser fechado, não pode ser aberto.
Que tal excluir um arquivo.
Você pode excluir um arquivo por invocando a função remove.
Isso também é declarado na standardio. h.
Todas as operações de arquivo são declarado no padrão. ioh.
Você sempre pode ir olhar isso arquivo de cabeçalho, se desejar, onde
quer que os arquivos de cabeçalho c estejam instalados.
Então você acabou de dizer remover nome do arquivo.
Aqui você não tem que use o ponteiro do arquivo.
Você pode apenas dizer porque o arquivo não
precisa estar aberto para removê-lo.
O mesmo com a renomeação porque você não quer realmente que os arquivos sejam abertos
porque o renomear ou a remoção falhará.
Isso vai deletar o arquivo que tem o nome meuarquivo. txt do diretório
atual.
Isso está fornecendo um caminho relativo.
Ele vai procurar por esse arquivo onde quer que o programa esteja sendo executado.
Caso contrário, você precisa fornecem um caminho absoluto.
O arquivo não pode ser aberto quando você tente excluí-lo, assim como renomear.
Você deve sempre verificar com operações que excluem arquivos.
Você poderia destruir o seu sistema se você não o fizer.
Excluir é muito caro, operação muito perigosa.
Excluir arquivos pode causar problemas.
Por isso tem cuidado.
Todas as informações nesta palestra tinha a ver com acessar arquivos, como você
pode abrir arquivos, que é o que você precisa fazer antes
de ler e escrever, e também como você pode excluir e renomear arquivos e, em
seguida, fechar quando terminar de usá-los.
Tudo é baseado fora desse ponteiro de arquivo.
Então entenda que o ponteiro do arquivo e a estrutura que contém.
Coisas muito úteis.
O cabeçalho IO padrão contém todas as ótimas informações.
Próximas palestras, nós vamos para
falar sobre ler e escrever em arquivos de texto, na verdade, adicionar dados ou adicionar ou ler.
Obrigada. Eu espero que isso tenha sido útil.