Sinalizando as bandeiras ios em c ++

Quando você abre um arquivo através da construção de qualquer um ofstream

ou ifstream exemplo, você pode modificar a forma como o arquivo será aberto pelo fornecimento que são chamados de bandeiras. Em termos de computador, um bandeira é simplesmente um pequeno item cuja presença ou falta de presença indica uma função como fazer algo. Com o ofstream e ifstream aulas, a função em questão é o construtor.

Video: CppCode - offline C/C++ IDE & Compiler on iOS

A bandeira parece ios :: app se você estiver usando um compilador que não é totalmente compatível com ANSI, ou parece ios_base :: app se você estiver usando um que é totalmente compatível com ANSI. Esta bandeira particular, significa que você quiser escrever para um arquivo, mas você deseja anexar todos os dados existentes que podem já estar em um arquivo. Você fornece esta bandeira como um argumento do construtor para ofstream, como em qualquer um dos exemplos que se seguem:

ofstream arquivo_de_saída ("AppendableFile.txt", Ios :: app) -ofstream outfile ("AppendableFile.txt", Ios_base :: app) -

Você pode ver que a bandeira é adicionado como um segundo parâmetro para o construtor. Outras bandeiras existe além aplicativo, e você pode combiná-las usando a ou operador, |. Por exemplo, uma bandeira é ios :: NoCreate (Que não está incluído no compiladores mais recentes).

Este significa “única abrir o arquivo se ele já existe.” Ou seja, não criar o arquivo se ele não existe. (Lembrar, ofstream cria um arquivo se ele ainda não existir.) Se o arquivo não existir, o aberto irá falhar, e quando você chamar falhou, você vai receber de volta uma verdade.

o ios :: NoCreate bandeira é acessível com ios :: app. Juntos, estes significam abrir um arquivo existente e anexar a ele. Ou seja, os dois juntos só funcionará se o arquivo já existe, ea chamada vai abrir o arquivo para uma operação de acréscimo. Se o arquivo não existir, o arquivo não será criado. Aqui está um exemplo de chamada:

ofstream arquivo_de_saída ("../MyFile.txt", Ios :: app | ios :: NoCreate) -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 () -

E se MyFile.txt não existe quando você executar este código, você recebe a mensagem Não foi possível abrir o arquivo! Mas se MyFile.txt existe, o aplicativo abre-lo, anexa a string Hi-lo e, finalmente, fecha-lo.

Acontece que o NoCreate flag não está disponível na nova biblioteca padrão. Vadio. Portanto, o código só funciona se você estiver usando uma versão anterior da biblioteca. Ao usar o compilador Code :: Blocks, você verá a seguinte mensagem de erro:

de erro: `NoCreate` não é um membro de `-std :: ios`

No entanto, você vai querer testar se o seu compilador especial inclui uma biblioteca que suporta ios :: NoCreate. Seu compilador pode apoiá-lo de qualquer maneira, mesmo que inclua a nova biblioteca padrão. Como uma alternativa para ios :: NoCreate, você pode usar o código a seguir (encontrados no FileOutput02 exemplo):

Video: How to Program with struct: Structures in Objective-C and C @ iPhoneDev.tv

ifstream infile ("../MyFile.txt") -se (infile.fail ()) {cout lt; lt; "Não foi possível abrir o arquivo!" lt; lt; endl-retorno 0-} infile.close () - outfile ofstream ("../MyFile.txt", Ios :: app) -outfile lt; lt; "Oi" lt; lt; endl-outfile.close () -

Neste caso, você começar por tentar abrir o arquivo para leitura. Se o arquivo não existir, você não pode ler a partir dele eo código sai com uma mensagem de falha. Se o código pode ler a partir do arquivo, ele reabre o arquivo para a escrita. Esta é uma solução complicada, mas funciona.

A seguir está uma lista dos sinalizadores disponíveis. Primeiro, aqui são os únicos para ios, no caso de você estiver usando um compilador que não é completamente compatível com ANSI:

  • ios :: app: Esta bandeira significa que você deseja abrir um arquivo e anexar a ele.

  • ios :: no: Integrar este flag se você quiser ler um arquivo.



  • ios :: out: Incluir esta bandeira se você quiser escrever para um arquivo.

  • ios :: trunc: Incluir esta bandeira se você quiser acabar com o conteúdo do arquivo antes de gravá-lo. É o oposto do acrescentar, e também é o padrão, se você não incluir especificamente a ios :: app.

  • ios :: NoCreate: Utilize este flag se você quiser garantir que o arquivo não será criado se ele não existir, resultando em que o arquivo não está sendo aberto.

  • ios :: noreplace: Esta bandeira é o oposto de NoCreate. Utilize este flag se você só quer criar um novo arquivo. Se você usar esta bandeira e o arquivo já existe, o arquivo não será aberto, e que a falha vai voltar verdade.

compiladores ANSI-compliant não suportam o ios :: noreplace bandeira ou. Neste caso, você pode usar o oposto da correção para o ios: NoCreate bandeira, como mostrado aqui (e encontrado no FileOutput03 exemplo):

ifstream infile ("../MyFile.txt") -se (! Infile.fail ()) {cout lt; lt; "O arquivo já existe!" lt; lt; endl-retorno 0-} infile.close () - outfile ofstream ("../MyFile.txt") -outfile lt; lt; "Oi" lt; lt; endl-outfile.close () -

Neste caso, o código tenta abrir o arquivo para leitura. Se o arquivo existir, o código mostra uma mensagem de erro e sai. Caso contrário, o código cria um novo arquivo e escreve para ele.

Os sinalizadores a seguir estão disponíveis em um compilador que é absolutamente compatível com ANSI!

  • ios :: comeu: Utilize este sinalizador para ir para o final do arquivo depois de abri-lo. Normalmente, você usa esse sinalizador quando você quer acrescentar dados ao arquivo.

  • ios_base :: binário: Utilize este sinalizador para especificar que o arquivo que você está abrindo irá armazenar dados binário - ou seja, dados que não representa cadeias de caracteres.

  • ios_base :: no: Especifique este sinalizador quando você quer ler de um arquivo.

  • ios_base :: fora: Integrar este sinalizador quando você quiser escrever para um arquivo.

  • ios_base :: trunc: Integrar este flag se você quiser acabar com o conteúdo de um arquivo antes de gravá-lo.

  • ios_base :: app: Integrar este flag se você deseja anexar o arquivo. É o oposto do trunc - isto é, a informação que já está no arquivo quando você abrir ele vai ficar lá.

Por que você precisa de um em bandeira e um Fora bandeira? Parece que o computador deve saber se você está escrevendo para um arquivo ou ler a partir dele, dependendo (respectivamente) se você usar ofstream ou ifstream. A resposta de porque você tem um dentro bandeira e um Fora flag é que outras classes estão disponíveis além ofstream e ifstream.

Os compiladores que ainda não suportam totalmente o padrão ANSI tem uma classe genérica em suas bibliotecas chamada fstream. Os compiladores ANSI-compliant têm em suas bibliotecas uma classe de modelo chamado basic_filebuf e uma classe chamada filebuf. Se você usar essas classes, você pode usar o dentro e Fora bandeiras.


Publicações relacionadas