Archivos usando fseek

Iniciado por nomsaro89, 24 Noviembre 2019, 18:52 PM

0 Miembros y 1 Visitante están viendo este tema.

nomsaro89

Buenos dias
Estoy aprendido a programar archivos y me surgio un problema al intentar usar fseek.

Mi programa consiste en un menu unicamente de 2 opciones, la primera deberia de abrir el archivo en una linea en especifico (esto usando fseek) y la segunda opcion hace que termine el menu.
Mi problema es que al abrir mi archivo, este no se encuentra en la linea que deberia.
Si no que se ubica desde el inicio del archivo.
Ojala puedan ayudarme, se los agradeceria mucho.  :-*

CODIGO:

#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>  //libreria para hacer uso de archivos
using namespace std;

int main ()
{
  int opcion=0;

                            do
                               { //Inicio do while


                                   cout<<"\t 1.- Abrir archivo" << '\n';
                                   cout<<"\t 2.- Finito." << '\n';


                                   cout<<'\n';
                                   cout<<"\t HOLA" << '\n';
                                   cout<<"\t Elige una opcion: ";
                                   cin>>opcion;
                                   cout<<'\n';

                               switch (opcion)
                               { //Inicio de switch case2

                                    case 1:
                                    FILE *archivo;

                                    archivo=fopen("C://users//Usuario//Desktop//TODO.txt", "r" );

                                          // Si no podemos abrir el archivo, terminamos el programa.
                                          if(archivo == NULL)
                                             {
                                              cout<<"No se pudo abrir el archivo...";
                                              return (1);
                                             }

                                          // Ahora con fseek nos posicionamos donde querramos,
                                          // en este caso 50 bytes desde el inicio del archivo.
                                          fseek(archivo, 50, SEEK_SET);

                                        // Al final cerramos
                                        fclose(archivo);

                                        break;
                              }

} while ( opcion = 2 ); //Final de do while

  return 0;
}


K-YreX

Coloca el código entre etiquetas de Código GeSHi...

Por lo que veo, la función <fseek()> para poder recibir un valor de offset (segundo parámetro), el fichero debe estar abierto en formato binario.
Modifica la apertura del archivo por:
Código (cpp) [Seleccionar]

// ruta_archivo que siga siendo la ruta de tu archivo
// r abre el archivo en modo lectura
// b abre el archivo en modo binario
archivo = fopen("ruta_archivo", "rb");


No sé si en C++ se podrá hacer de otra manera ya que parece que estás usando un método nativo de C.

PD: La condición del <while()> es una asignación, no una comparación, por lo que no te funcionará.
PD 2: Tienes un <switch()> con un único <case>... Para un único valor, acabas antes haciendo un condicional <if()>.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;