Como complemento de la clase me gustaría recomendarles estos tres tutoriales que explican los modos básicos en que podemos crear, escribir, leer y append información a un texto. Usando funciones como fprintf, fgets, foef, etc. Siento que es un poco más sencillo de esta forma
Writing files
Reading files
Appending files
Me encantó ese canal. Muchas gracias <3
Gracias
En el curso de Terminal y Linea de comandos explican más a fondo esto!
¿Nos podrías decir en que parte, por favor?
gracias ^^
Como queda el código de ambos escenarios (escribir y leer):
#include<stdio.h>struct personalData { char name[20]; char lastName[20]; int age;};int main(){printf("Archivos - Guardar en un archivo!\n");//Creamos una estructura llamada 'person' de tipo 'personalData' struct personalData person;//Creamos un archivoFILE*archivo;//Abrimos el archivo creado y le ponemos un nombre seguido le indicamos si lo vamos a escribir o a leer.//archivo = fopen("DatosPersonales001.dat","wb"); //Para escribir archivo =fopen("DatosPersonales001.dat","rb");//Para leerif(archivo !=NULL){//PARA ESCRIBIR EL ARCHIVO/*
fflush(stdin); //Limpiamos el buffer para evitar basura
printf("Leer los datos:\n");
printf("Ingresar nombre:\n");
gets(person.name);
printf("Ingresar apellido\n");
gets(person.lastName);
printf("Ingresar edad\n");
scanf("%i", &person.age);
printf("Imprimir datos: \n");
printf("%s\n", person.name);
printf("%s\n", person.lastName);
printf("%i\n", person.age);
fwrite(&person, sizeof(person), 1, archivo);
*///PARA LEER EL ARCHIVOfread(&person,sizeof(person),1, archivo);printf("Imprimir los datos \n");printf("Nombre: %s\n", person.name);printf("Nombre: %s\n", person.lastName);printf("Nombre: %i\n", person.age);fclose(archivo);}else{printf("No se ha podido crear el archivo");}}
dos puntos por terminar de ver el video :v
Este código incluye los dos ejemplos de guardar y leer datos de un archivo en un mismo script.
#include <stdio.h>#include <stdlib.h>struct personalData{ char name[20]; char lastName[20]; int age;};voidcrearArchivo(){ struct personalData person;FILE*archivo; archivo =fopen("DatosPersonales001.dat","wb");if(archivo !=NULL){fflush(stdin);printf("Guardar datos: \n");printf("Ingresar nombre: \n");gets(person.name);printf("Ingresar apellido: \n");gets(person.lastName);printf("Ingresar edad: \n");scanf("%d",&person.age);fwrite(&person,sizeof(person),1,archivo);fclose(archivo);}else{printf("No se ha podido crear el archivo.\n");}}voidleerArchivo(){ struct personalData person;FILE*archivo; archivo =fopen("DatosPersonales001.dat","rb");if(archivo !=NULL){fread(&person,sizeof(person),1,archivo);printf("Imprimir los datos: \n");printf("Nombre: %s \n",person.name);printf("Apellido: %s \n",person.lastName);printf("Edad: %i\n\n",person.age);fclose(archivo);}else{printf("No se ha podido crear el archivo.\n");}}int main(){while(1){crearArchivo();leerArchivo();}return0;}
Gracias por compartir ^^
¿De esta manera tan simple trabaja un virus sobrescribiendo archivos y borrando informacion?
Hay alguna razón para que la 'f' tenga un protagonismo que hace parte de muchos comandos de C como prefijos o sufijo. O acaso se trata simplemente de 'file'?
se trata simplemente de acortar las palabras "fuction" o "file"
Code Blocks - Practica de escritura
Code Blocks practica - leer archivo
Para leer se puede utilizar la función fread.
Para escribir necesitamos utilizar la función fwrite y en ella vamos a usar cuatro parámetros.
El primero, es el apuntador con la dirección de la información que estamos guardando.
El segundo, el tamaño de cada elemento que será escrito.
El tercero, el número de elementos.
El cuarto, el apuntador con la dirección al archivo donde estamos guardando/escribiendo.
Para leer también se cuenta con cuatro parámetros:
El primero, el apuntador con la dirección de la información que estamos leyendo.
El segundo, el tamaño de cada elemento que será leído.
El tercero, número de elementos.
El cuarto, el apuntador con la dirección al archivo donde estamos leyendo.
Escribiendo el archivo:
1 #include <stdio.h>23 struct PersonalData{4 char first_name[20];5 char last_name[20];6 int age;7};89 int main(){10 struct PersonalData me;1112FILE*archive;13 archive =fopen("Datos_personales.dat","wb");1415if(archive !=NULL){16fflush(stdin);17printf("Ingresa tu nombre\n");18gets(me.first_name);19printf("Ingresa tu apellido\n");20gets(me.last_name);21printf("Ingresa tu edad:\n");22scanf("%i",&me.age);2324printf("Hola %s %s\n", me.first_name, me.last_name);25printf("Tienes %i primaveras cumplidas\n", me.age);2627fwrite(&me,sizeof(me),1, archive);28//fwrite(puntero_de_que, el_tamano_de_lo_que_escribes, cuantos_escribes, el_archivo_que_escribes);29fclose(archive);30}else{31printf("El archivo no se creo\n");32}33}
Leyendo el archivo:
1 #include <stdio.h>23 struct PersonalData{4 char first_name[20];5 char last_name[20];6 int age;7};89 int main(){10 struct PersonalData me;1112FILE*archive;13 archive =fopen("Datos_personales.dat","rb");1415if(archive !=NULL){16fread(&me,sizeof(me),1, archive);17printf("Hola %s %s\n", me.first_name, me.last_name);18printf("Tienes %i primaveras cumplidas\n", me.age);19fclose(archive);20}else{21printf("El archivo no se abre :(\n");22}23}
Hola comunidad! alguien sabe ¿como puedo ejecutar un archivo .c desde la terminal con shell zsh? gracias
En este tutorial viene cómo hacerlo para Windows, lo he probado en Windows 10 x64, uso Git Bash con oh-my-posh y sin problema.
Un saludo.
Gracias! bro
Hola a todos. Tengo un problema recurrente con mi código. Ya puedo crear el archivo, guardar información en él y leerlo. Pero en struct hay una variable int(numPags), que cuando uso fread(), titulo y variable las imprime bien, pero numPags siempre me imprime 32759 o 32758. No importa qué valores tenga mi struct original, cuando creo un nuevo struct y le digo que lea los valores del anterior, numPags nunca es igual. Mi código:
#include <stdio.h>#include <stdlib.h>struct Libro{ char titulo[30]; char autor[30]; int numPags;};int main(){ struct Libro libro;FILE*archivo; archivo =fopen("data1.txt","w");if(archivo !=NULL){fflush(stdin);printf("Ingrese el titulo:\n");gets(libro.titulo);printf("Ingrese el autor:\n");gets(libro.autor);printf("Ingrese # de pags:\n");scanf("%d",&libro.numPags);fwrite(&libro,sizeof(libro),1, archivo);fclose(archivo);}else{printf("No se pudo abrir el archivo!");} struct Libro libro1; archivo =fopen("data1.txt","r");if(archivo !=NULL){printf("Datos del segundo libro:\n");fread(&libro1,sizeof(libro1),1, archivo);printf("%s\n", libro1.titulo);printf("%s\n", libro1.autor);printf("%i\n", libro1.numPags);fclose(archivo);}else{printf("No se pudo abrir el archivo creado!");}return0;}
Gracias
Buenas peña.
Por fin he podido replicar tu ejercicio, y no veo nada raro, al contrario, el resultado es correcto. Te comparto el repl del mismo, para que lo revises.
Incluso creo otro fichero, y leo después el anterior, y me pone los datos que había.
Un saludo.
Al final, el error estaba siendo causado porque en la línea de
archivo =fopen("data1.bat","rb");
Tenía que poner rb
Gracias :)
No entiendo la condicion, archivo != NULL.
Esto se debe a que si un archivo antes de crearlo es NULL pero al evaluarlo con la condición igual entra, porque?
Alguien sabe?
Hola @elunico567, por lo que entendí de tu consulta y lo que vi en la clase, te comento el if(archivo != NULL) es para asegurarse que antes de escribir el archivo, este existe y se pudo abrir de manera correcta, es una especia de manejo de errores
Puede que este mensaje ya no les sirva porque ya saben que es lo que significa, pero respondere por si alguien mas lo lee...
Cuando nosotros declaramos un objeto pero no lo inicializamos, este por lo general esta vacio, eso es lo que significa NULL, entonces la instruccion if(archivo != NULL) lo que esta verificando es que el puntero "archivo" contenga algo dentro de el, y no solo sea un contenedor vacio. Si "archivo" no tuviera nada dentro de el, la condicion seria falsa y pasaria al "else".
que pasa si quiero escribir texto sin ayuda de un struct? se puede?
Claro, el struct es solo un concepto para organizar la variables y también la memoria
No me sale para ingresar los datos, que estoy haciendo mal?
#include <stdio.h>
#include <stdlib.h>
struct personalData
{
char name[20];
char lastName[20];
int age;
}
int main()
{
printf("Archivos - Guardar en un archivo!\n");
struct personalData person;FILE*archivo;archivo =fopen("DatosPersonales001.dat","wb");if(archivo =NULL){fflush(stdin);printf("Leer datos: \n");printf("Ingresar nombre: \n");gets(person.name);printf("Ingresar apellido: \n");gets(person.lastName);printf("Ingresar edad: \n");scanf("%i",&person.age);printf("Imprimir datos: \n");printf("%s \n", person.name);printf("%s \n", person.lastName);printf("%i \n", person.age);fwrite(&person,sizeof(person),1, archivo);fclose(archivo);}else{printf("No se ha podido crear el archivo");}return0;
}
Compañero, lo que pasa es que falta el ";" al final del struct.
struct personalData
{
char name[20];
char lastName[20];
int age;
};
Tengo una duda, podría leer información de un documento que no haya creado usando c o incluso no haya creado yo, por ejemplo tengo un archivo txt o sql y quiero tomar unos nombres de ellos podría leer los archivos y tomar los nombres?
Siii, es completamente posible. Inténtalo, es importante experimentar.