Leer y escribir bits en un archivo en C++

Syed Hassan Sabeeh Kazmi 12 octubre 2023
Leer y escribir bits en un archivo en C++

En C++, procesos como la compresión de un archivo de texto requieren leer y escribir los bits en un archivo. En este tutorial, aprenderá cómo leer o escribir bits en un archivo sin errores en C++.

El istream y ostream, como destructor, juegan un papel crucial cuando se requiere leer y escribir bits en un archivo.

Sin embargo, puede requerir escribir bits en un archivo de salida binario mientras se codifica a través del árbol Huffman en la codificación Huffman, y en lugar de usar los flujos, puede empaquetar los valores booleanos en fragmentos de 8 bits y luego escribir los bytes.

Utilice iStream y oStream para leer y escribir bits en un archivo en C++

La clase BitInputStream contiene las funciones iStream y oStream para leer y escribir bits. Como ifstream y ofstream pueden abrir archivos binarios adjuntando flujos a un nombre de archivo físico, también son cruciales para leer o escribir bits en un archivo.

Además, las funciones miembro abiertas de una clase de destino BitInputStream pueden proporcionar argumentos (argumentos opcionales) que no se describen en común.

El ostream es una de las funciones miembro abiertas que hace que se escriban n bytes desde la ubicación de la memoria y transfiere el puntero por delante de los n bytes.

La clase de flujo fstream es altamente funcional que cualquier otra clase de flujo debido a su capacidad para leer y escribir desde/hacia archivos.

No es importante que los flujos de archivos lean y escriban operaciones en binario solo porque se abren en modo binario; en cambio, pueden realizar operaciones de lectura/escritura de cualquier tipo de consideración.

#include <fstream>
#include <iostream>  // reflects `istream` and `ostream`

// optional
using namespace std;

// struct declaration
struct army_per {
  // an entity that reflects three attributes
  int ref_no;
  string rank, name;
};

// primary class
int main() {
  // declaration of `ofstream` for read/write `army_per` file
  ofstream wf("army_per.dat", ios::out | ios::binary);

  if (!wf) {
    cout << "Unable to open the file!" << endl;
    return 1;
  }

  // entity declaration
  army_per soldier[2];

  // first entry
  soldier[0].ref_no = 1;
  soldier[0].name = "Rob";
  soldier[0].rank = "Captain";

  // second entry
  soldier[1].ref_no = 2;
  soldier[1].name = "Stannis";
  soldier[1].rank = "Major";

  for (int i = 0; i < 2; i++) wf.write((char *)&soldier[i], sizeof(army_per));

  wf.close();

  if (!wf.good()) {
    cout << "Error: bits writing time error!" << endl;
    return 1;
  }

  ifstream rf("army_per.dat", ios::out | ios::binary);

  if (!rf) {
    cout << "File is not found!" << endl;
    return 1;
  }

  army_per rstu[2];
  for (int i = 0; i < 2; i++) rf.read((char *)&rstu[i], sizeof(army_per));

  rf.close();

  if (!rf.good()) {
    cout << "Error: bits reading time error occured!" << endl;
    return 1;
  }

  cout << "Army Div-32 details:" << endl;

  for (int i = 0; i < 2; i++) {
    // access the elements of the object and output the result of each
    // individual
    cout << "Reference No: " << soldier[i].ref_no << endl;
    cout << "Name: " << soldier[i].name << endl;
    cout << "Rank: " << soldier[i].rank << endl;
    cout << endl;
  }
  return 0;
}

Producción :

Army Div-32 details:
Reference No: 1
Name: Rob
Rank: Captain

Reference No: 2
Name: Stannis
Rank: Major

Generalmente, se cree que cin y cout pertenecen a ostream en C++, pero el objeto cin (como objeto global) pertenece a la clase istream.

Además, el flujo de archivos, que incluye; ifstream y ofstream, se heredan de istream y ostream, respectivamente.

Los programadores deben tener en cuenta que el búfer siempre es mayor que los datos que se supone que debe contener. En C++, las posibilidades de disminuir la confiabilidad de su programa pueden aumentar en caso de errores no verificados o resueltos, y asegúrese de que ninguna operación de archivo haga que el programa se detenga.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub

Artículo relacionado - C++ File