C++ Manipulação de arquivos: como abrir, gravar, ler e fechar arquivos em C++
O que é manipulação de arquivos em C++?
Os arquivos armazenam dados permanentemente em um dispositivo de armazenamento. Com a manipulação de arquivos, a saída de um programa pode ser armazenada em um arquivo. Várias operações podem ser executadas nos dados enquanto estão no arquivo.
Um fluxo é uma abstração de um dispositivo onde operações de entrada/saída são executadas. Você pode representar um fluxo como um destino ou uma fonte de caracteres de comprimento indefinido. Isso será determinado pelo uso deles. C++ fornece uma biblioteca que vem com métodos para manipulação de arquivos. Vamos discutir isso.
A biblioteca fstream
A biblioteca fstream fornece C++ programadores com três classes para trabalhar com arquivos. Essas aulas incluem:
- de corrente– Esta classe representa um fluxo de saída. É usado para criar arquivos e gravar informações em arquivos.
- ifstream– Esta classe representa um fluxo de entrada. É usado para ler informações de arquivos de dados.
- stream– Esta classe geralmente representa um fluxo de arquivos. Ele vem com recursos ofstream/ifstream. Isso significa que ele é capaz de criar arquivos, gravar arquivos e ler arquivos de dados.
A imagem a seguir facilita a compreensão:
Para usar as classes acima da biblioteca fstream, você deve incluí-las em seu programa como um arquivo de cabeçalho. Claro, você usará a diretiva de pré-processador #include. Você também deve incluir o arquivo de cabeçalho iostream.
Como abrir arquivos
Antes de realizar qualquer operação em um arquivo, você deve primeiro abri-lo. Se você precisar gravar no arquivo, abra-o usando objetos fstream ou ofstream. Se você precisar apenas ler o arquivo, abra-o usando o objeto ifstream.
Os três objetos, ou seja, fstream, ofstream e ifstream, possuem a função open() definida neles. A função assume esta sintaxe:
open (file_name, mode);
- O parâmetro file_name denota o nome do arquivo a ser aberto.
- O parâmetro mode é opcional. Pode assumir qualquer um dos seguintes valores:
Valor | Descrição |
---|---|
ios:: aplicativo | O modo Anexar. A saída enviada para o arquivo é anexada a ele. |
ios::comeu | Ele abre o arquivo para saída e move o controle de leitura e gravação para o final do arquivo. |
ios::no | Ele abre o arquivo para leitura. |
ios::fora | Ele abre o arquivo para gravação. |
ios::trunc | Se existir um arquivo, os elementos do arquivo deverão ser truncados antes de sua abertura. |
É possível usar dois modos ao mesmo tempo. Você os combina usando o | (OU) operador.
1 exemplo:
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file", ios::out); if (!my_file) { cout << "File not created!"; } else { cout << "File created successfully!"; my_file.close(); } return 0; }
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream no programa para usar suas funções.
- Inclua o arquivo de cabeçalho fstream no programa para usar suas classes.
- Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
- Chame a função main(). A lógica do programa deve estar dentro do seu corpo.
- Crie um objeto da classe fstream e dê a ele o nome my_file.
- Aplique a função open() no objeto acima para criar um novo arquivo. O modo out nos permite escrever no arquivo.
- Use a instrução if para verificar se a criação do arquivo falhou.
- Mensagem para imprimir no console caso o arquivo não tenha sido criado.
- Fim do corpo da instrução if.
- Use uma instrução else para indicar o que fazer se o arquivo for criado.
- Mensagem para imprimir no console se o arquivo foi criado.
- Aplique a função close() no objeto para fechar o arquivo.
- Fim do corpo da instrução else.
- O programa deve retornar um valor se for concluído com sucesso.
- Fim do corpo da função main().
Como fechar arquivos
Uma vez C++ programa termina, ele automaticamente
- libera os riachos
- libera a memória alocada
- fecha arquivos abertos.
No entanto, como programador, você deve aprender a fechar arquivos abertos antes que o programa termine.
Os objetos fstream, ofstream e ifstream possuem a função close() para fechar arquivos. A função assume esta sintaxe:
void close();
Como escrever em arquivos
Você pode gravar no arquivo diretamente do seu C++ programa. Você usa o operador de inserção de fluxo (<<) para isso. O texto a ser escrito no arquivo deve ser colocado entre aspas duplas.
Deixe-nos demonstrar isso.
2 exemplo:
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file.txt", ios::out); if (!my_file) { cout << "File not created!"; } else { cout << "File created successfully!"; my_file << "Guru99"; my_file.close(); } return 0; }
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream no programa para usar suas funções.
- Inclua o arquivo de cabeçalho fstream no programa para usar suas classes.
- Inclua o namespace std no programa para usar suas classes sem chamá-lo.
- Chame a função main(). A lógica do programa deve ser adicionada ao corpo desta função.
- Crie uma instância da classe fstream e dê a ela o nome my_file.
- Use a função open() para criar um novo arquivo chamado my_file.txt. O arquivo será aberto no modo out para gravação nele.
- Use uma instrução if para verificar se o arquivo não foi aberto.
- Texto a ser impresso no console se o arquivo não for aberto.
- Fim do corpo da instrução if.
- Use uma instrução else para indicar o que fazer se o arquivo for criado.
- Texto a ser impresso no console se o arquivo foi criado.
- Escreva algum texto no arquivo criado.
- Use a função close() para fechar o arquivo.
- Fim do corpo da instrução else.
- O programa deve retornar o valor após a conclusão bem-sucedida.
- Fim do corpo da função main().
Como ler arquivos
Você pode ler informações de arquivos em seu C++ programa. Isso é possível usando o operador de extração de fluxo (>>). Você usa o operador da mesma forma que o usa para ler a entrada do usuário no teclado. No entanto, em vez de usar o objeto cin, você usa o objeto ifstream/fstream.
3 exemplo:
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file.txt", ios::in); if (!my_file) { cout << "No such file"; } else { char ch; while (1) { my_file >> ch; if (my_file.eof()) break; cout << ch; } } my_file.close(); return 0; }
Saída:
Arquivo inexistente
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream no programa para usar suas funções.
- Inclua o arquivo de cabeçalho fstream no programa para usar suas classes.
- Inclua o namespace std no programa para usar suas classes sem chamá-lo.
- Chame a função main(). A lógica do programa deve ser adicionada ao corpo desta função.
- Crie uma instância da classe fstream e dê a ela o nome my_file.
- Use a função open() para criar um novo arquivo chamado my_file.txt. O arquivo será aberto no modo in para leitura dele.
- Use uma instrução if para verificar se o arquivo não existe.
- Texto a ser impresso no console se o arquivo não for encontrado.
- Fim do corpo da instrução if.
- Use uma instrução else para indicar o que fazer se o arquivo for encontrado.
- Crie uma variável de caractere chamado cap.
- Crie uma loop while para iterar sobre o conteúdo do arquivo.
- Escreva/armazene o conteúdo do arquivo na variável ch.
- Use uma condição if e uma função eof() que é o final do arquivo, para garantir que o compilador continue lendo o arquivo se o final não for atingido.
- Use uma instrução break para interromper a leitura do arquivo quando o final for alcançado.
- Imprima o conteúdo da variável ch no console.
- Fim do corpo while.
- Fim do corpo da instrução else.
- Chame a função close() para fechar o arquivo.
- O programa deve retornar o valor após a conclusão bem-sucedida.
- Fim do corpo da função main().
Resumo
- Com a manipulação de arquivos, a saída de um programa pode ser enviada e armazenada em um arquivo.
- Várias operações podem então ser aplicadas aos dados enquanto estão no arquivo.
- Um stream é uma abstração que representa um dispositivo onde as operações de entrada/saída são executadas.
- Um fluxo pode ser representado como destino ou origem de caracteres de comprimento indefinido.
- A biblioteca fstream fornece C++ programadores com métodos para manipulação de arquivos.
- Para usar a biblioteca, você deve incluí-la em seu programa usando a diretiva de pré-processador #include.