Vídeo: Programar em C - Manipulação de Arquivos txt em C / Ler Dados - Aula 82 2024
Quando você abre um arquivo, todos os tipos de coisas podem dar errado. Um arquivo vive em um dispositivo físico - um disco fixo, por exemplo, ou talvez em uma unidade flash ou cartão SD - e você pode enfrentar problemas ao trabalhar com dispositivos físicos.
Por exemplo, parte do disco pode estar danificada, fazendo com que um arquivo existente fique corrompido. Ou, menos desastroso, você pode ficar sem espaço em disco. Ou, mesmo menos desastroso, você pode tentar abrir um arquivo em um diretório que não existe.
Se você tentar abrir um arquivo para escrever especificando um caminho completo e um nome de arquivo, mas o diretório não existe, o computador responde de forma diferente, dependendo do sistema operacional que você está usando. Se você não tiver certeza de como seu sistema operacional irá responder, tente escrever um aplicativo de teste simples que tente criar e abrir algo como / abc / def / ghi / jkl / abc. TXT. (Claro, você vai querer ter certeza de usar um diretório que não existe.)
Então, uma das duas coisas acontecerá: Ou o diretório e o arquivo serão criados, ou nada acontecerá.
Por exemplo, em um sistema Windows, se tentarmos criar um arquivo em um diretório que não existe, o sistema não cria o diretório. Isso é porque, no fundo, o aplicativo geralmente chama uma função de sistema operacional que faz o trabalho sujo de criar o arquivo. E esta função particular do sistema operacional (é chamado CreateFile (), se você se importar) tem uma regra de que não irá criar um diretório para você.
Se você deseja determinar se a classe ostream não pôde criar um arquivo, você pode chamar sua função de membro fail (). Esta função retorna true se o objeto não puder criar o arquivo. E é o que acontece quando um diretório não existe. O exemplo do DirectoryCheck01 mostrado demonstra um exemplo disso.
#include #include usando namespace std; int main () {outstream outstream ("/ abc / def / ghi / MyFile. txt"); se (outfile. fail ()) {cout << "não pôde abrir o arquivo!" << endl; retornar 0;} outfile << "oi" << endl; outfile. fechar(); retornar 0;}
Quando você executa este código, assumindo que você não possui um diretório chamado / abc / def / ghi no seu sistema, você deve ver a mensagem. Não foi possível abrir o arquivo! Supondo que seu sistema operacional particular não crie um diretório neste caso; Se o fizer, o seu computador abrirá o arquivo, escreva Olá e continue com sua vida feliz depois de fechar as coisas.
Como alternativa para chamar a função de falha (), você pode usar um operador disponível em várias classes de fluxo. Isto é!, designado como o operador "bang", e você o usaria no lugar da falha de chamada (), como neste código:
se (!outfile) {cout << "não pôde abrir o arquivo!" << endl; return 0;}
A maioria das pessoas prefere usar! outfile em vez de outfile. falha (), embora! outfile faz código confuso. A razão é que outfile é um objeto, e a noção de! outfile simplesmente não faz sentido.
Na verdade,! Outfile dispara muitos programadores iniciais. Eles sabem que o outfile não é um ponteiro neste código de exemplo, e eles se perguntam como você pode testá-lo contra 0, como você normalmente pode fazer com um ponteiro. (Lembre-se, dizendo! X, onde x é um ponteiro, você está testando x contra 0.) E isso simplesmente não faz sentido! E assim, para evitar confusões, basta chamar fail (). Faz mais sentido.
Aqui estão alguns motivos para a tentativa de criação do arquivo:
-
O diretório não existe.
-
Você está fora do espaço em disco e sem sorte.
-
Seu aplicativo não possui as permissões corretas para criar um arquivo.
-
O nome do arquivo era inválido - ou seja, continha caracteres que o sistema operacional não permite em um nome de arquivo, como * ou?.
Como qualquer boa aplicação, sua aplicação deve fazer duas coisas:
-
1. Verifique se uma criação de arquivo foi bem-sucedida.
-
2. Se a criação do arquivo falhou, lembre-a adequadamente.
Não imprima apenas uma mensagem horrível como Oops! Abortando!, deixando seus usuários pobres sem escolha, mas para jogar o monitor no chão. Em vez disso, faça algo mais amigável - como apresentar uma mensagem dizendo que existe um problema e sugerindo que eles possam liberar mais espaço em disco.