Dudas de Programacion » Lenguajes de Proposito General » C++

MANEJO DE ARCHIVOS EN C

(25 posts)
  • Started 1 year ago by jeremias10
  • Latest reply from jeremias10
  1. fiurer87
    Member

    ERROR: .docx no es un archivo de texto plano.

    Si abres un fichero .docx es lo mismo que intentar abrir un fichero de tipo .rar o .zip.

    Word tiene su propio descomprensor, lo unico que puedes usar en C++ es texto plano.

    Un ejemplo: intenta abrir un docx con bloc de notas y vera que pasa.

    Atte: Roberto.

    Posted 1 year ago #


  2. en el programa q coloque arriba el grande le coloque .txt, .docx. y .dat y me dio igual un monto de signos raros q nada q ver, quisiera q me ayudaras con ese ejemplo q te coloque en el foro, talves sera mucho lo q pido pero me podrian decir donde tego los errores y xq no me da como yo lo quiero, y si m lo pudieran arreglar c los agradecira si no es mucho pedir

    gracias

    Posted 1 year ago #
  3. fiurer87
    Member

    correccion de codigo que pusiste:

    if ((fichero = fopen("pacientes.dat", "w+")) == NULL) { //intenta con w+ y con tipo dat
    printf ("Error en apertura del fichero para escritura\n");
    }
    else {
    //guardamos los datos en el fichero
    fwrite(&paciente, sizeof(paciente), 1, fichero);
    printf("\nPaciente agreado.");
    fclose (fichero); //cierra en cuanto agrega un solo paciente
    }

    Posted 1 year ago #
  4. fiurer87
    Member

    y para leer intenta con r+. ejemplo:

    fichero = fopen("pacientes.dat","r+");

    Posted 1 year ago #


  5. hola el inge q nos da clases nos dijo q ".dat" era un archivo el cual no ponidiamos abrir, voy a intentar ingresarle a mi programon "w+" a ver q pasa, ahora nos dejo un porgrama para q tenga q;
    INGRESAR
    MODIFICICAR/actualizar
    ver
    eliminar
    print //imprimir con el API DE WINDOWS

    me podrian decir q letra uso en cada uno de ellos es q me confunde un poco,lo q pasa es q e visto otros progrmas donde utilizan dos letras ejemplo;"ab","wb", y me explicaran xq en esos programas utilizan eso

    grcias

    Posted 1 year ago #
  6. fiurer87
    Member

    En realidad y en resumen, tu aplicacion puede generar cualquier extension que tu desees para manejar archivos de texto: .dat, .algo, . nombre, lo que deses al final lo que importa es el contenido que tiene a nivel de bytes.

    API de Windows, (solo uso LINUX :P asi que no puedo aportar efectivamente con eso).

    Explicacion de ab, wb ... etc.

    Son modos de apertura de archivos, a continuacion te los detallo.

    "r" Abre un archivo de texto para lectura.
    "w" Crea un archivo de texto para escritura.
    "a" Abre un archivo de texto para añadir
    "rb" Abre un archivo binario para lectura.
    "wb" Crea un archivo binario para escritura.
    "ab" Abre un archivo binario para añadir.
    "r+" Abre un archivo de texto para lectura/escritura.
    "w+" Crea un archivo de texto para lectura/escritura.
    "a+" Abre o crea un archivo de texto para lectura/escritura.
    "rb+" Abre un archivo binario para lectura/escritura.
    "wb+" Crea un archivo binario para lectura/escritura.
    "ab+" Abre o crea un archivo binario para lectura/escritura.
    "rt" Abre un archivo de texto para lectura.
    "wt" Crea un archivo de texto para escritura.
    "at" Abre un archivo de texto para abrir.
    "r+t" Abre un archivo de texto para lectura/escritura.
    "w+t" Crea un archivo de texto para lectura/escritura.
    "a+t" Abre o crea un archivo de texto para lectura/escritura.

    ahora con estos datos seguro sabras cual usar segun lo que estas trabajando.

    Espero te sirva

    Posted 1 year ago #
  7. mira mi codigo pero a la hora de ver los datos donde apunto no tengo nada, y me da un error a la ora de ponerle el nombre del producto, solo me da el codigo y el precio
    cuando me voy a mi disco c y busco el archivo chiri no tengo los datos q ingrese anteriormente, xq sera, si ya probe con "w,a,w+,a+," y nada q ver, me guie segun loq me diste arriba, espero tu ayuda gracias:

    este es mi codigo q llevo ahorita:

    #include<stdio.h>
    #include<conio.h>

    struct {
    char nombre[25];
    int codigo;
    float precio;
    }electric;

    //prototipos
    void menu();
    void ingresarproduct();

    //funcion principal

    int main()
    {
    int op;
    int salir=0;

    while (salir !=1)
    {
    menu();
    scanf("%d",&op);

    switch(op)
    {
    case 0:
    salir = 1;
    break;

    case 1:
    clrscr();
    ingresarproduct();
    break;

    }// final del switch

    }// fin del while

    printf("\n\n");
    return 0;
    }//fin del menu principal

    //MENU

    void menu()
    {
    printf("\n ejercicio de ARCHIVOS ");
    printf("\n seleccione la operacion q desea realizar \n");
    printf("\n 1 -> ingresar producto");

    printf("\n 0 -> salir");
    printf("\n op");

    }// fin el switch

    void ingresarproduct()
    {
    FILE *fichero;

    printf("\n ingrese el nombre del producto");
    gets(electric.nombre);

    printf("\n ingrese el codigo del producto");
    scanf("%d",electric.codigo);

    printf("\n ingrese el precio del producto");
    scanf("%f",electric.precio);

    if ((fichero = fopen("chiri.txt","a")) == NULL) {
    printf("error el archivo no existe");
    }

    else {
    fwrite (&electric, sizeof(electric),1,fichero);
    printf("\n producto agregado exitosamente");
    fclose (fichero);
    }

    printf("\n\n");
    }

    Posted 1 year ago #


  8. fiurer87
    Member

    La mejora y solucion a tu codigo ya lo publique en otro hilo, revisa la pagina principal, lo hice alli por que este hilo ya esta de buen tamanio.

    Saludos.

    Espero ganarme algunos puntos con esta solucion, haber si me sumas...

    Posted 1 year ago #
  9. fiurer87
    Member

    Hola Jeremias,

    En base a tu codigo, mando la solucion, implemente ademas el lector de la Base De Datos, y usa fichero tipo .txt.

    Que falta? pues control de excepciones como ser: que pasara si el sistema me pide un entero y yo le paso un caracter?, bueno esos detalles, espero te guste la solucion.

    Nota: A mi me funciona y no me muestra nada de signos.
    Creo que con esto termino mi participacion en ese hilo :|
    ===========================================================
    #include <stdio.h>
    #include <stdlib.h>

    struct articulo{
    char nombre[50];
    int codigo;
    float precio;
    };

    char* enteroAcadena(int val, int base){
    static char buf[32] = {0};
    int i = 30;
    for(; val && i ; --i, val /= base)
    buf[i] = "0123456789abcdef"[val % base];
    return &buf[i+1];
    }

    void mostrarDatos(struct articulo a){
    printf("DETALLE ARTICULO: \n");
    printf("Nombre: %s\n",a.nombre);
    printf("Codigo: %d\n",a.codigo);
    printf("Precio: %.2f\n", a.precio);
    }

    void guardarDatos(struct articulo a){
    FILE *auxf = fopen("baseDeDatos.txt","a");
    fputs(a.nombre, auxf);
    fputs(" ", auxf);
    fputs(enteroAcadena(a.codigo,10),auxf);
    fputs(" ", auxf);
    char aux[50];
    sprintf(aux,"%.2f",a.precio);
    fputs(aux, auxf);
    fputs("\n", auxf);
    printf("Guardado Correctamente :) \n");
    fclose(auxf);
    }

    struct articulo leerArticulo(){
    struct articulo algo;
    printf("\nNombre: ");
    scanf("%s", (char*)&algo.nombre);
    printf("\nCodigo: ");
    scanf("%d",&algo.codigo);
    printf("\nPrecio: ");
    scanf("%f",&algo.precio);
    return algo;
    }

    int menu(){
    //system("clear"); //linux
    clrscr(); //windows
    printf("========================\n");
    printf("1. Ingresar Producto.\n");
    printf("2. Leer Lista.\n");
    printf("3. Salir.\n");
    printf("========================\n");
    printf("Ingrese su opcion[1/2/3]_ ");
    int opcion;
    scanf("%d",&opcion);
    return opcion;
    }

    void leerBaseDeDatos(){
    FILE *aux;
    if((aux = fopen("baseDeDatos.txt","r")) == NULL){
    //me salgo sin hacer nada :) si no existe BD
    return;
    }
    char cadena[80];
    fgets(cadena,60,aux);
    do{
    printf("%s\n",cadena);
    }while(fgets(cadena,80,aux)!=NULL);
    int uno;
    printf("\nPresione 1 y luego Enter para volver al menu.");
    scanf("%d", &uno);
    fclose(aux);
    }

    void acciones(int opcion){
    //system("clear"); //linux
    clrscr(); //windows
    struct articulo nuevo;
    switch(opcion){
    case 1: nuevo = leerArticulo();
    guardarDatos(nuevo);
    break;
    case 2: leerBaseDeDatos(); break;
    case 3: exit(0); break;
    default: break;
    }
    }

    int main(){
    int bandera;
    while(1){
    bandera = menu();
    acciones(bandera);
    }
    return 0;
    }
    ================================================

    Espero te sirva.

    Atte: Roberto

    Posted 1 year ago #
  10. hasta el momento ya me ingresa datos en mi "disco c", el error q tengo ahora es q la ora de modificar archivos me da un error y no lo encuentro me podrias decir donde esta el error, si fueras tam amable de corregirme pero con mi codigo q llevo asta el momento, es q no m quiero perder de donde voy, ya vi tus codigos y si estan bien, y me doy cuenta q cada persona programa diferente, espero q me ayudes

    este mi codigo actual:

    #include<stdio.h>
    #include<conio.h>
    #include<iostream.h>

    struct {
    char nombre[25];
    int codigo;
    float precio;
    }electric;

    //prototipos
    void menu();
    void ingresarproduct();
    void modificarproduct();
    void eliminarproduct();
    void verproduct();

    void imprimirproduct();

    //funcion principal

    int main()
    {
    int op;
    int salir=0;

    while (salir !=1)
    {
    menu();
    scanf("%d",&op);

    switch(op)
    {
    case 0:
    salir = 1;
    break;

    case 1:
    clrscr();
    ingresarproduct();
    break;

    case 2:
    clrscr();
    modificarproduct();
    break;

    case 3:
    clrscr();
    eliminarproduct();
    break;

    case 4:
    clrscr();
    verproduct();
    break;

    case 5:
    clrscr();
    imprimirproduct();
    break;

    }// final del switch

    }// fin del while

    printf("\n\n");
    return 0;
    }//fin del menu principal

    //MENU

    void menu()
    {
    printf("\n ejercicio de ARCHIVOS ");
    printf("\n seleccione la operacion q desea realizar \n");
    printf("\n 1 -> ingresar producto");
    printf("\n 2 -> modificar producto");
    printf("\n 3 -> eliminar producto");
    printf("\n 4 -> ver producto");
    printf("\n 5 -> imprimir en impresora");
    printf("\n 0 -> salir");
    printf("\n op");

    }// fin el switch

    void ingresarproduct()
    {
    FILE *fichero;

    cout<<"\n ingrese el nombre del producto:"<<endl;
    cin>>electric.nombre;

    cout<<"\n ingrese el codigo del producto:"<<endl;
    cin>>electric.codigo;

    cout<<"\n ingrese el precio del producto"<<endl;
    cin>>electric.precio;

    if ((fichero = fopen("casa.txt","a")) == NULL) {
    printf("error el archivo no existe");
    }

    else {
    fwrite (&electric, sizeof(electric),1,fichero);
    printf("\n producto agregado exitosamente");
    fclose (fichero);
    }

    printf("\n\n");

    }

    void modificarproduct()
    {
    int codigobuscado;
    int encontrado=0;
    struct electric newproduct;

    FILE *fichero;
    FILE *ficherox;

    cout<<"ingrese el codigo a modificar";
    cin>>codigobuscado;

    if((fichero = fopen("casa.txt","r")) == NULL){
    printf("\n no existe el producto");
    }
    else {
    fread (&electric,sizeof(electric),1,fichero);
    while (!feof(fichero) && (encontrado !=1)){
    if (codigobuscado == electric.codigo)
    encontrado=1;
    fread (&electric, sizeof(electric),1,fichero);
    }
    }
    fclose (fichero);

    if (encontrado == 1){

    newproduct.codigo = codigobuscado;

    cout<<"ingrese el nombre del producto:"<<endl;
    cin>>newproduct.nombre;

    cout<<"ingrese el precion:"<<endl;
    cin>>newproduct.precio;

    if ((fichero =fopen("casa.txt","r"))==NULL)
    printf("error no existe");

    else
    {
    fread(&casa, sizeof(casa),1,fichero);
    while (!feof(fichero)){
    else
    fwrite(&newproduct, sizeof(casa),1,ficherox);
    fread (&casa, sizeof(casa),1,fichero)
    }
    fclose (fichero);
    fclose (ficherox);
    remove("casa.txt");
    rename("casax.txt","casa.txt");
    }
    }
    else {
    printf("producto no encontrado");
    }

    printf("\n\n");
    }

    void eliminarproduct()
    {
    }
    void verproduct()
    {
    }

    void imprimirproduct()
    {
    }

    Posted 1 year ago #

Reply

You must log in to post.

935 posts in 394 topics over 36 months by 349 of 787 members. Latest: Balkirium, redundantlogic2, shianim

Acerca de...

Dudas de Programación es una Web, dentro del proyecto aulambra.com que nace con la idea de propocionar un foro de consultas sobre diferentes temas de programación. Orientado a ayudar a los internautas hispano-hablantes en Internet.

Ir al Blog de Linea de Código

Otras Webs