Página pessoal: Bem-vindos a todos --> Populus euphratica sob o deserto
Gente, vocês são tão lindos
Se você achar o artigo útil
Você pode apoiar blogueiros com um clique
Cada grama de sua preocupação é a força motriz para eu perseverar
☄: Foco desta edição: Conhecimento sobre operações de arquivos
Espero que todos tenham um bom estudo e trabalho todos os dias.
O que é um arquivo? Por que ter documentos? Qual é o nome do arquivo?
Os arquivos no disco são arquivos, mas em programação, geralmente falamos de dois tipos de arquivos: arquivos de programa e arquivos de dados (classificados sob a perspectiva das funções dos arquivos).arquivos de Programas:Incluindo arquivos de programa de origem (com sufixo .c ) , arquivos de objeto ( com sufixo .obj no ambiente Windows ) , programas executáveis ( com sufixo .exe no ambiente Windows ).arquivo de dados:O conteúdo do arquivo não é necessariamente o programa, mas os dados lidos e gravados quando o programa é executado, como o arquivo do qual o programa precisa ler os dados ou o arquivo do qual o conteúdo é gerado.Isso é chamado de arquivo.Nossos métodos gerais de persistência de dados incluem armazenamento de dados em arquivos de disco, armazenamento de dados em bancos de dados e assim por diante. Usando arquivos, podemos armazenar dados diretamente no disco rígido do computador, o que torna os dados persistentes, razão pela qual usamos arquivos.Um arquivo deve ter um identificador de arquivo único para identificação e referência do usuário.O identificador de arquivo consiste em três partes: caminho do arquivo + nome do arquivo tronco + sufixo do arquivo, geralmente também chamamos o identificador do arquivo de nome do arquivo.
O conceito de fluxo:
Um fluxo é um canal formado entre um sistema e um programa. Os dois são um relacionamento um-para-um, e o fluxo expressa a capacidade de interagir entre os dois. O chamado "sistema de tempo de execução do programa ANSI C deve fornecer três fluxos, stdin, stdout, stderr", ou seja, o sistema deve fornecer esses três "canais" , a saber
1, o canal stdin entre o programa e a entrada padrão (teclado padrão)
2, o canal stdout entre o programa e a saída padrão (exibição padrão)
3, o canal stderr entre o programa e o terminal (o padrão também é o display)
Há também o fluxo de arquivos no qual queremos nos concentrar hoje, usando o ponteiro FILE* para apontar para a memória para operações subsequentes.
abertura e fechamento de arquivo
O arquivo deve ser aberto antes da leitura e escrita, e deve ser fechado após o término do uso . Ao escrever um programa, ao abrir um arquivo, ele retornará uma variável ponteiro FILE* para apontar para o arquivo, o que também equivale a estabelecer uma relação de ponteiro e arquivo. ANSIC estipula que a função fopen é usada para abrir o arquivo e fclose para fechar o arquivo.A frente de fopen é o nome do arquivo, e algumas strings específicas são necessárias depois dele, e fclose só precisa fechar a variável de ponteiro de arquivo.
operações de leitura e gravação de arquivos
Não basta apenas saber abrir e fechar arquivos, devemos também saber ler e escrever arquivos.
O acima é a função de operação de arquivo comumente usada
Aqui está o que realmente fazemos:
Escreva os números 0~9 no arquivo:
int main() { FILE *p = fopen("胡杨.dat", "w"); if (NULL == p) { perror("main:"); exit(-1); } for (char i = '0'; i <= '9'; i++) { fputc(i,p); } fclose(p); p = NULL; return 0; }
A forma de gravação "w" é usada para abrir o arquivo, a função fputs é usada para escrever caracteres e, em seguida, um loop é usado para inserir cada caractere de 0 a 9 no arquivo.
Leia o conteúdo do arquivo
int main() { FILE *p = fopen("胡杨.dat", "r"); if (NULL == p) { perror("main:"); exit(-1); } char a[15] = { 0 }; fgets(a, 11, p); puts(a); fclose(p); p = NULL; return 0; }
Aqui está uma pequena pergunta, por que 11 é usado na função fgets? São 10 números no total, 11 vezes para ler?
Porque a cópia padrão de '\0' é copiar o final da string, que pode ser vista através da depuração.
Pode-se ver que se forem copiadas 10 cópias, então apenas 8 serão copiadas e paradas, ou seja, a última copiará '\0' por padrão
Portanto, ao usar fgets, há um elemento a mais do que a cópia real, ou seja, se você deseja copiar 10 elementos, 11 devem ser escritos em fgets.
ler e escrever em binário
Queremos escrever algum arquivo confidencial no arquivo, podemos escrever em binário no arquivo.
Tomemos a estrutura como exemplo para facilitar a observação:
typedef struct stu { char name[20]; int age; int ID[10]; }stu; int main() { FILE *p = fopen("树下.dat", "wb"); if (NULL == p) { perror("main:"); exit(-1); } stu s1 = { "胡杨树下", 18, { 1, 2, 3, 4, 5, 6, 7, 8, 9 } }; fwrite(&s1, sizeof(s1), 1, p); fclose(p); return 0; }
Escritas binárias, não entendemos, mas os arquivos sabem .
Vamos abrir com binário .
int main() { FILE *p = fopen("树下.dat", "rb"); if (NULL == p) { perror("main:"); exit(-1); } stu s2 = { 0 }; fread(&s2, sizeof(s2), 1, p); fclose(p); return 0; }
Isso pode ser passado, o binário é lido e o arquivo é lembrado.
Precauções
1. Em primeiro lugar, quando precisamos conhecer um arquivo para operar, devemos primeiro considerar o método de abertura , se é somente leitura ou somente escrita ou outros métodos.
2. Determine se o arquivo foi aberto com sucesso .
3. Para julgar como escrever no arquivo, seja para entrada uma a uma, linha por linha ou saída, as funções usadas são diferentes.
4. No final você deseja fechar o arquivo .
Próximo aviso:
A próxima edição explicará o conhecimento da série de arquivos.
Maravilhosa próxima edição~! ~! ~!