elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  fread o alguna funcion para leer un bloc de notas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: fread o alguna funcion para leer un bloc de notas  (Leído 7,182 veces)
Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
fread o alguna funcion para leer un bloc de notas
« 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!


En línea

En lo que sea, pero el mejor.
X3R4CK3R

Desconectado Desconectado

Mensajes: 74


Divide y vencerás


Ver Perfil WWW
Re: fread o alguna funcion para leer un bloc de notas
« Respuesta #1 en: 5 Octubre 2012, 14:40 pm »

Puedes usar fstream
http://www.cplusplus.com/reference/iostream/fstream/


En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: fread o alguna funcion para leer un bloc de notas
« Respuesta #2 en: 5 Octubre 2012, 15:22 pm »

Citar
size_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:

Código
  1. char cadena[MAX];
  2. FILE *f=fopen("archivo.txt", "r");
  3.  
  4. 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:

Código
  1. int bytesLeidos;
  2. char cadena[MAX];
  3. FILE *f=fopen("archivo.txt", "r");
  4.  
  5. do {
  6.    bytesLeidos=fread(cadena, sizeof(char), MAX-1, f);
  7. } while (bytesLeidos>0);

espero que te sirva... un saludo!
En línea

Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: fread o alguna funcion para leer un bloc de notas
« Respuesta #3 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.

En línea

En lo que sea, pero el mejor.
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: fread o alguna funcion para leer un bloc de notas
« Respuesta #4 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!
En línea

Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: fread o alguna funcion para leer un bloc de notas
« Respuesta #5 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)

Código:
#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.
« Última modificación: 5 Octubre 2012, 16:00 pm por Erres » En línea

En lo que sea, pero el mejor.
Erres

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: fread o alguna funcion para leer un bloc de notas
« Respuesta #6 en: 5 Octubre 2012, 15:59 pm »

gracias por la aclaracion xiruko.
En línea

En lo que sea, pero el mejor.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: fread o alguna funcion para leer un bloc de notas
« Respuesta #7 en: 5 Octubre 2012, 17:56 pm »

por 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:
Código
  1. 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:
Código:
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
En línea

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

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: fread o alguna funcion para leer un bloc de notas
« Respuesta #8 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:

Código:
#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 línea

En lo que sea, pero el mejor.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Función fread y saltos de línea
Programación C/C++
NathanD 8 5,975 Último mensaje 20 Marzo 2013, 20:25 pm
por NathanD
Ayuda para salida en bloc de notas
Programación C/C++
jucie 2 4,051 Último mensaje 18 Abril 2015, 22:41 pm
por jucie
Problema al usar el fread al leer vectores en una estructura
Programación C/C++
matilp 4 2,585 Último mensaje 23 Febrero 2017, 15:41 pm
por matilp
Necesito ayuda para poner una fecha limite o fecha final a mi programa para mi bloc de notas
Programación C/C++
Alex1209 2 7,159 Último mensaje 15 Diciembre 2020, 08:15 am
por K-YreX
Como leer un texto que hay en [Batch] con el Bloc de notas « 1 2 »
Scripting
MaX2 11 5,851 Último mensaje 10 Febrero 2022, 08:21 am
por MaX2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines