Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Erres en 5 Octubre 2012, 14:26 PM

Título: fread o alguna funcion para leer un bloc de notas
Publicado por: Erres en 5 Octubre 2012, 14:26 PM
Hola tengo una duda de como funciona fread.

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

lo que quiero hacer es leer un bloc de notas, pero nose que poner en las 2 del medio.
ejemplo:


char texto[100];
FILE * pFile;

fread(texto, *, *, pFile);


donde puse los "*" (asteriscos), ahi ¿que numeros van?, o ¿de que depende el numero que voy a poner ahi?, o ¿que significa "size_t size, size_t count"?;

o alguna otra manera de leer un bloc de notas?

gracias!
Título: Re: fread o alguna funcion para leer un bloc de notas
Publicado por: X3R4CK3R en 5 Octubre 2012, 14:40 PM
Puedes usar fstream
http://www.cplusplus.com/reference/iostream/fstream/
Título: Re: fread o alguna funcion para leer un bloc de notas
Publicado por: xiruko en 5 Octubre 2012, 15:22 PM
Citarsize_t fread ( void * ptr, size_t size, size_t count, FILE * stream )

*ptr -> puntero a la cadena donde se almacenara lo leido.
size -> tamaño de los datos a leer. si quieres leer en este caso caracteres de un bloc de notas, deberias poner un sizeof(char) o un 1 ya que ese es el tamaño de char.
count -> numero de bloques de tamaño size a leer. como has puesto antes lo de sizeof(char), en este caso deberas poner el numero de caracteres que quieres leer.
*stream -> puntero al archivo.

en resumen, te quedaria algo asi:

char cadena[MAX];
FILE *f=fopen("archivo.txt", "r");

fread(cadena, sizeof(char), MAX-1, f); //MAX-1 para dejar el caracter nulo al final de la cadena


ademas, no te olvides que fread() devuelve el numero de bytes leidos. esto es util para saber cuando acaba un fichero. en este caso podrias hacer algo asi:

int bytesLeidos;
char cadena[MAX];
FILE *f=fopen("archivo.txt", "r");

do {
    bytesLeidos=fread(cadena, sizeof(char), MAX-1, f);
} while (bytesLeidos>0);


espero que te sirva... un saludo!
Título: Re: fread o alguna funcion para leer un bloc de notas
Publicado por: Erres en 5 Octubre 2012, 15:52 PM
Gracias XeRaCKeR y xiruko,

pero entonces creo que estoy intentando usar la funcion incorrecta,

1. haber si me quedo claro, fread me regresa el # de bytes leidos?
2. entonces estoy usando la funcion equivocada, lo que yo quiero hacer es es lo siguiente:

imaginemos que el bloc de notas contiene lo siguiente:
"Hola, soy yo."

estoy buscando una funcion que me regrese ese
"hola, soy yo."

checare el fstream y si alguien sabe como hacer eso que estoy intentando agradezo la ayuda.

Título: Re: fread o alguna funcion para leer un bloc de notas
Publicado por: xiruko en 5 Octubre 2012, 15:57 PM
fread() te hace eso. en el puntero de la cadena que le pasas como argumento te dejara lo que hay escrito en el bloc de notas; y la funcion devolvera el numero de bytes leidos.

un saludo!
Título: Re: fread o alguna funcion para leer un bloc de notas
Publicado por: Erres en 5 Octubre 2012, 15:58 PM
por cierto, el fread si me esta funcionando, pero me regresa mas de lo que ocupo (me regresa caracteres raros)


#include "stdafx.h"
#include <iostream>


int _tmain(int argc, _TCHAR* argv[])
{
FILE * hola;
char leer[100];

hola = fopen("notepad.txt","a+");
// fputs (leer, hola);

rewind(hola);
fread(leer,sizeof(char), 99,hola);
puts(leer);
fclose(hola);
system("pause");
return 0;
}



para esto tengo un notepad que se llama "notepad" y ahi tengo el texto que quiero leer.
Título: Re: fread o alguna funcion para leer un bloc de notas
Publicado por: Erres en 5 Octubre 2012, 15:59 PM
gracias por la aclaracion xiruko.
Título: Re: fread o alguna funcion para leer un bloc de notas
Publicado por: rir3760 en 5 Octubre 2012, 17:56 PM
Cita de: Erres en  5 Octubre 2012, 15:58 PMpor cierto, el fread si me esta funcionando, pero me regresa mas de lo que ocupo (me regresa caracteres raros)
La razón es, al no darle un valor inicial a cada elemento del array "leer", estos inician con un valor no definido o basura. Para corregir eso debes cambiar la declaración a, por ejemplo:
char leer[100] = "hola";

Y se deben tener en cuenta dos detalles en relación a la función "fread":

1) La función lee los caracteres y los almacena tal cual, no agrega el '\0' como es el caso con "fscanf" y "fgets" (lo cual puede ser bueno o malo, dependiendo del caso).

2) La función retorna el numero de elementos leídos y almacenados, esto es:
numero de caracteres leídos / tamaño del elemento
Si el tamaño del elemento es 1 el valor retornado es el numero de caracteres pero no es así si el tipo del elemento es, por ejemplo, "signed int".

Un saludo
Título: Re: fread o alguna funcion para leer un bloc de notas
Publicado por: Erres en 5 Octubre 2012, 18:19 PM
gracias rir3760 y a todos por la ayuda

para los que quieran leer de un .txt aqui esta el codigo que resulto:


#include "stdafx.h"
#include <iostream>


int _tmain(int argc, _TCHAR* argv[])
{
FILE * hola;
char leer[100] = "hola";

hola = fopen("notepad.txt","a+");

rewind(hola);
fread(leer,sizeof(char), 100-1,hola);
puts(leer);
fclose(hola);
system("pause");
return 0;
}


gracias, creo que ya se puede cerrar este tema.