C/Visual C - Devolver al fichero el elemento ya leido

 
Vista:

Devolver al fichero el elemento ya leido

Publicado por Jose Antonio (15 intervenciones) el 13/12/2002 17:35:02
Hola, de nuevo aqui pidiendo ayuda. Como se puede volver a colocar un elemento ya leido de un fichero a ese fichero en la misma posicion, para que pueda ser leido de nuevo. En C se usaria la funcion unget(c,stdio) pero en visual c++ cual se usaria?. Gracias por todo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Recolocar un elemento leído en un archivo en C++

Publicado por Alejandro (940 intervenciones) el 23/04/2025 17:32:51
En C++, puedes utilizar la función `std::cin.putback()` para volver a colocar un carácter en el flujo de entrada, similar a cómo se usa `ungetc()` en C. Sin embargo, si estás trabajando con archivos, puedes utilizar la función `seekg()` para mover el puntero de lectura a una posición específica en el archivo y luego volver a leer el carácter o los datos que necesites.

Aquí tienes un ejemplo de cómo hacerlo en C++ utilizando un archivo:

Código en C++



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <fstream>
 
int main() {
    std::ifstream file("ejemplo.txt"); // Abre el archivo en modo lectura
    if (!file) {
        std::cerr << "No se pudo abrir el archivo." << std::endl;
        return 1;
    }
 
    char c;
    // Leer un carácter del archivo
    file.get(c);
    std::cout << "Carácter leído: " << c << std::endl;
 
    // Volver a colocar el carácter en el archivo
    file.putback(c); // Esto no funciona directamente en archivos, se usa para flujos de entrada
 
    // Para volver a leer el carácter, primero debes mover el puntero de lectura
    file.clear(); // Limpia el estado del flujo
    file.seekg(-1, std::ios::cur); // Mueve el puntero de lectura una posición hacia atrás
 
    // Leer de nuevo el carácter
    file.get(c);
    std::cout << "Carácter leído de nuevo: " << c << std::endl;
 
    file.close(); // Cierra el archivo
    return 0;
}

Explicación del código



1. Abrir el archivo: Se abre un archivo llamado `ejemplo.txt` en modo lectura.

2. Leer un carácter: Se utiliza `file.get(c)` para leer un carácter del archivo.

3. Colocar de nuevo el carácter: En este caso, `file.putback(c)` no se puede usar directamente en archivos, ya que está diseñado para flujos de entrada como `std::cin`. En su lugar, se utiliza `seekg()` para mover el puntero de lectura.

4. Limpiar el estado del flujo: Se llama a `file.clear()` para limpiar cualquier estado de error en el flujo.

5. Mover el puntero de lectura: Se utiliza `file.seekg(-1, std::ios::cur)` para mover el puntero de lectura una posición hacia atrás.

6. Leer de nuevo el carácter: Se vuelve a leer el carácter utilizando `file.get(c)`.

7. Cerrar el archivo: Finalmente, se cierra el archivo.

Notas adicionales



- Asegúrate de que el archivo `ejemplo.txt` exista y contenga al menos un carácter para que el programa funcione correctamente.
- Este enfoque es útil para archivos de texto. Si trabajas con archivos binarios, el manejo puede ser diferente.

¡Espero que esto te sea útil, José!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar