Autor
|
Tema: fread o alguna funcion para leer un bloc de notas (Leído 7,182 veces)
|
Erres
Desconectado
Mensajes: 30
|
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.
|
|
|
|
xiruko
Desconectado
Mensajes: 438
|
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: 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!
|
|
|
En línea
|
|
|
|
Erres
Desconectado
Mensajes: 30
|
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
Mensajes: 438
|
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
Mensajes: 30
|
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.
|
|
« Última modificación: 5 Octubre 2012, 16:00 pm por Erres »
|
En línea
|
En lo que sea, pero el mejor.
|
|
|
Erres
Desconectado
Mensajes: 30
|
gracias por la aclaracion xiruko.
|
|
|
En línea
|
En lo que sea, pero el mejor.
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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: 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
|
|
|
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
Mensajes: 30
|
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 línea
|
En lo que sea, pero el mejor.
|
|
|
|
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
|
20 Marzo 2013, 20:25 pm
por NathanD
|
|
|
Ayuda para salida en bloc de notas
Programación C/C++
|
jucie
|
2
|
4,051
|
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
|
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
|
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
|
10 Febrero 2022, 08:21 am
por MaX2
|
|