fread o alguna funcion para leer un bloc de notas

Iniciado por Erres, 5 Octubre 2012, 14:26 PM

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

Erres

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!
En lo que sea, pero el mejor.


xiruko

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!

Erres

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.

En lo que sea, pero el mejor.

xiruko

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!

Erres

#5
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.
En lo que sea, pero el mejor.

Erres

En lo que sea, pero el mejor.

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Erres

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.
En lo que sea, pero el mejor.