Programa en C++ para modificar el contenido de un Archivo Binario

Este artículo explica cómo modificar el contenido de un archivo binario.

Dado un archivo binario que contiene los registros de los estudiantes, la tarea es modificar o alterar el registro del estudiante especificado. Si no existe el registro de dicho estudiante, imprima «registro no encontrado».

Ejemplos:

Input:
old roll no: 1
new roll no: 11
new name: "Geek"
Output:
roll no: 11
name: "Geek"
record successfully modified

Input:
old roll no: 234
new roll no: 14
new name: "Geek2"
Output:
record not found

En este ejemplo, se toma del usuario el número de registro existente del estudiante cuyo registro se va a modificar y se crea un registro recién actualizado que reemplaza el registro anterior.

Acercarse:

  • Paso 1: Búsqueda del número de rollo en el archivo binario.
  • Paso 2: mientras busca en el archivo, la variable «pos» almacena la posición del registro del puntero del archivo y luego recorre (continúa) la lectura del registro.
  • Paso 3: Si existe el número de rollo a buscar, coloque el puntero de escritura (al final del registro anterior), es decir, en la pos.
  • Paso 4: Llame a la función getdata para tomar el nuevo registro.
  • Paso 5: escriba el nuevo objeto en la posición «pos» y, por lo tanto, el registro se actualiza e imprime «registro actualizado con éxito».
  • Paso 6: Si el número de rollo no existe, imprima «registro no encontrado».

Funciones de biblioteca estándar utilizadas:

// tells the position of read pointer 
file.tellg();

// places the writing pointer at 
// position "pos" in the file
file.seekp(pos);

A continuación se muestra la implementación del enfoque anterior:

// C++ program to modify the content
// of a binary file
  
#include <bits/stdc++.h>
using namespace std;
  
class abc {
    int roll;
    char name[20];
  
public:
    void getdata(int, char[]);
    void update(int, int, char[]);
    void testcase1();
    void testcase2();
    void putdata();
};
  
// Code to display the data of the
// data of the object
void abc::putdata()
{
    cout << "roll no: ";
    cout << roll;
    cout << "\nname: ";
    cout << name;
}
  
// Code to set the value to the object
void abc::getdata(int a, char str[])
{
    // setting the new roll no
    roll = a;
  
    // setting new name
    strcpy(name, str);
}
  
void abc::update(int rno, int r, char str[])
{
    // code to update and modify
    // the content of the binary file
    int pos, flag = 0;
  
    // rno=9
    fstream fs;
    fs.open("he.dat",
            ios::in | ios::binary | ios::out);
  
    while (!fs.eof()) {
        // storing the position of
        // current file pointeri.e. at
        // the end of previously read record
        pos = fs.tellg();
  
        fs.read((char*)this, sizeof(abc));
        if (fs) {
  
            // comparing the roll no with that
            // of the entered roll number
            if (rno == roll) {
                flag = 1;
  
                // setting the new (modified )
                // data of the object or new record
                getdata(r, str);
  
                // placing the put(writing) pointer
                // at the starting of the  record
                fs.seekp(pos);
  
                // writing the object to the file
                fs.write((char*)this, sizeof(abc));
  
                // display the data
                putdata();
                break;
            }
        }
    }
    fs.close();
  
    if (flag == 1)
        cout << "\nrecord successfully modified \n";
    else
        cout << "\nrecord not found \n";
}
  
// Sample input 1
void abc::testcase1()
{
    int rno, r;
    char name[20];
  
    // roll no to be searched
    rno = 1;
  
    // new roll no
    r = 11;
  
    // new name
    strcpy(name, "Geek");
  
    // call update function with new values
    update(rno, r, name);
}
  
// Sample input 2
void abc::testcase2()
{
    int rno, r;
    char name[20];
  
    // roll no to be searched
    rno = 4;
  
    // new roll no
    r = 14;
  
    // new name
    strcpy(name, "Geek2");
  
    // call update function with the new values
    update(rno, r, name);
}
  
// Driver code
int main()
{
    abc s;
  
    // sample case 1
    s.testcase1();
  
    // sample case 2
    s.testcase2();
  
    return 0;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por vinaychopra92vc y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *