Tratamento de erros no c ++ ao abrir um arquivo
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 um cartão flash drive ou SD - e você pode ter problemas ao trabalhar com dispositivos físicos.
Conteúdo
Por exemplo, parte do disco pode ser danificado, fazendo com que um arquivo existente para se tornar corrompido. Ou, menos desastrosa, você pode ficar sem espaço em disco. Ou, ainda menos desastrosa, que você pode tentar abrir um arquivo em um diretório que não existe.
Se você tentar abrir um arquivo para escrita, especificando um caminho completo e nome, mas o diretório não existe, o computador reage de maneira diferente, dependendo do sistema operacional que você está usando. Se não tiver certeza como seu sistema operacional em particular irá responder, tente escrever um aplicativo de teste simples que tenta criar e algo aberto como /abc/def/ghi/jkl/abc.txt. (Claro, você vai querer se esqueça de usar um diretório que não existe.)
Em seguida, uma das duas coisas vai acontecer: ou o diretório e o arquivo irá ser criada, ou nada acontecerá.
Por exemplo, em um sistema Windows, se tentar criar um arquivo em um diretório que não existe, o sistema não cria o diretório. Isso porque no fundo, a aplicação em última análise, chama uma função do sistema operacional que faz o trabalho sujo de criar o arquivo. E esta função do sistema operacional específico (ele é chamado CreateFile (), se você mesmo cuidado) tem uma regra que não irá criar um diretório para você.
Se você quiser determinar se o ostream classe não foi capaz de criar um arquivo, você pode chamar a sua falhou() função de membro. Esta função retorna verdade se o objeto não pôde criar o arquivo. E isso é o que acontece quando um diretório não existe. o DirectoryCheck01 exemplo mostrado demonstra um exemplo disto.
#incluir#incluir using namespace std-int main () {ofstream outfile ("/abc/def/ghi/MyFile.txt") -se (outfile.fail ()) {cout lt; lt; "Não foi possível abrir o arquivo!" lt; lt; endl-retorno 0-} outfile lt; lt; "Oi" lt; lt; endl-outfile.close () - retorno 0-}
Ao executar este código, supondo que você não tem um diretório chamado / ABC / DEF / GHI em seu sistema, você deverá ver a mensagem Não foi possível abrir o arquivo! Assumindo que o seu sistema operacional em particular não cria um diretório neste caso- se ele, o computador irá abrir o arquivo, escrever Oi para ele, e seguir em frente com a sua vida feliz depois de fechar as coisas.
Como uma alternativa para chamar a falhou() função de membro, você pode usar um operador disponível em várias classes de fluxo. Este é!, Carinhosamente conhecido como o operador “bang”, e você iria utilizá-lo no lugar de chamar falhou(), como neste código:
if (! outfile) {cout lt; lt; "Não foi possível abrir o arquivo!" lt; lt; endl-retorno 0-}
A maioria das pessoas preferem usar !outfile ao invés de outfile.fail (), Apesar !outfile torna o código confuso. A razão é que outfile é um objeto, e a noção de !outfile simplesmente não faz sentido.
De fato, !outfile viagens até muitos programadores iniciantes. Eles sabem que outfile não é um ponteiro neste código de exemplo, e se perguntam como você pode testá-lo contra 0 como você normalmente só pode fazer com um ponteiro. (Lembre-se, dizendo !X, Onde X é algum ponteiro, você está testando X contra 0.) E isso simplesmente não faz sentido! E assim, para evitar confusão, é só chamar falhou(). Faz mais sentido.
Aqui estão algumas razões sua criação arquivo pode sufocar:
O diretório não existe.
Você está fora do espaço em disco e fora da sorte.
Sua aplicação não tem as permissões corretas para criar um arquivo.
O nome do arquivo era inválido - ou seja, ele continha caracteres do sistema operacional não permite que um nome de arquivo, como * ou?.
Video: Apague os erros no 'Abrir Com' do Windows
Como qualquer bom aplicativo, seu aplicativo deve fazer duas coisas:
Video: Tratamento de erros no php(try,catch)
1.Verifique se a criação do arquivo conseguiram.
2.Se a criação do arquivo falhou, manipulá-lo adequadamente.
Não basta imprimir uma mensagem horrível como Ops! Abortar!, deixando os usuários pobres sem escolha a não ser atirar o monitor no chão. Em vez disso, fazer algo mais amigável - como a apresentação de uma mensagem dizendo-lhes que há um problema e sugerindo que eles podem liberar mais espaço em disco.