Latest web development tutorials

arquivos e fluxos de C ++

Até agora, temos utilizado a biblioteca padrãoiostream, que fornece um método de fluxos de cinecoutsão usados para ler da entrada padrão e escrever para o fluxo de saída padrão.

Este tutorial mostra como ler e gravar arquivos de fluxo para transmitir arquivos. É aí que outrafstream biblioteca padrão C ++,ele define três novos tipos de dados:

数据类型 描述
ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream 该数据类型表示输入文件流,用于从文件读取信息。
fstream 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

Para registrar a movimentação em C ++, você deve incluir o arquivo de cabeçalho em C ++ arquivo de código-fonte <iostream> e <fstream>.

Abra o arquivo

Antes de ler as informações do arquivo ou gravar em um arquivo, você deve primeiro abrir o arquivo. objetosofstream e fstreampode ser usado para abrir o arquivo para gravação, se você só precisa abrir o arquivo para leitura, use o objetoifstream.

Aqui é a função open () é a sintaxe padrão, a função open () é um membro da fstream, ifstream e ofstream objetos.

void open(const char *filename, ios::openmode mode);

Aqui, aberta) função (membro do primeiro parâmetro para especificar o nome ea localização do arquivo que você deseja abrir, eo segundo parâmetro define o arquivo é o modo aberto.

模式标志 描述
ios::app 追加模式。所有写入都追加到文件末尾。
ios::ate 文件打开后定位到文件末尾。
ios::in 打开文件用于读取。
ios::out 打开文件用于写入。
ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

É possível utilizar uma combinação de dois ou mais dos modos acima. Por exemplo, se você deseja abrir o arquivo em modo de gravação e deseja truncar o arquivo para impedir que o arquivo já existe, você pode usar a seguinte sintaxe:

ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );

Da mesma forma, se você deseja abrir um arquivo para leitura e escrita, você pode usar a seguinte sintaxe:

fstream  afile;
afile.open("file.dat", ios::out | ios::in );

Feche o arquivo

Quando o programa C ++ termina, ele desliga-se automaticamente atualizar todos os fluxos, liberar toda a memória alocada e feche todos os arquivos abertos. Mas os programadores deve desenvolver um bom hábito, antes do programa termina feche todos os arquivos abertos.

Aqui é a função close () é a sintaxe padrão, a função close () é um membro da fstream, ifstream e ofstream objetos.

void close();

Gravar no arquivo

Na programação C ++, usamos o operador de inserção de fluxo (<<) para gravar informações em um arquivo, como usar a informação de saída para o operador na mesma tela. A única diferença é que aqui você estiver usandoofstream ou objeto fstreamem vez de objetocout.

Leia o arquivo

Na programação C ++, usamos o operador de extração de fluxo (>>) lê as informações de um arquivo, como usar as informações de entrada do operador a partir do teclado. A única diferença é que aqui você está usandofstream ou objeto ifstreamem vez de objetocin.

Ler e escrever exemplos

O seguinte programa C ++ para abrir um arquivo em modo de leitura e escrita. Após a gravação para o arquivo afile.dat informações inseridas pelo usuário, o programa lê as informações do arquivo e saída para a tela:

#include <fstream>
#include <iostream>
using namespace std;
 
int main ()
{
    
   char data[100];

   // 以写模式打开文件
   ofstream outfile;
   outfile.open("afile.dat");

   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   cin.getline(data, 100);

   // 向文件写入用户输入的数据
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // 再次向文件写入用户输入的数据
   outfile << data << endl;

   // 关闭打开的文件
   outfile.close();

   // 以读模式打开文件
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 

   // 在屏幕上写入数据
   cout << data << endl;
   
   // 再次从文件读取数据,并显示它
   infile >> data; 
   cout << data << endl; 

   // 关闭打开的文件
   infile.close();

   return 0;
}

Quando o código acima é compilado e executado, ele produz as seguintes entradas e saídas:

$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9

Os exemplos acima usar um objeto de função cin adicional, como getline () função lê uma linha a partir do exterior, ignore () irá ler a declaração antes de deixar os caracteres extras são ignorados.

ponteiro de posição de arquivo

istream e ostreamfornecer funções de membro para reposicionar a posição do ponteiro de arquivo. Estes incluem sobre funções de membro istream deseekg ( "procurar obter") e sobre o seekpostream( "buscar colocar").

seekp seekg eo argumento é geralmente um número inteiro longo. O segundo parâmetro pode ser usado para especificar a direcção da busca. Encontrar direcção pode serios :: Beg (padrão, posicionando a partir do início do fluxo), que pode ser ios :: cur (de posicionamentoa partir da posição corrente do fluxo), que pode serios :: final (a partirdo final do fluxo é iniciado posicionamento).

ponteiro de posição do arquivo é um valor inteiro que especifica o número de bytes a partir do início do arquivo para o local do ponteiro. Aqui está visando "ficar" instância ponteiro posição do arquivo:

// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)
fileObject.seekg( n );

// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );

// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );

// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );