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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al abrir binario en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema al abrir binario en C  (Leído 5,311 veces)
juanperez3214

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Problema al abrir binario en C
« en: 4 Febrero 2012, 22:34 pm »


Saludos, porfavor si me pudieran  ayudar con un problemita  en  este  pequeno codigo


#include <stdio.h>
#include <stdlib.h>

int openbin(void);

int main(){

openbin();
return 0;

}

int openbin(void){

   FILE *pfile;
   char namebin[50];
        printf("Name:\n");

        fgets(namebin,sizeof(namebin), stdin);
   if ((pfile = fopen(namebin, "rb"))== NULL)
   {
      printf("Couldn't open the file\n");
      exit(1);
   }
   printf("The file was opened successfully\n");
   return 0;
}

lo que pasa es que cuando introdusco el name del archivo a abrir este nunca es abierto(obvio, estando el archivo en la misma carpeta), no se en que pueda estar fallando porfavor alguien que me de luz sobre el tema, Gracias



En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema al abrir binario en C
« Respuesta #1 en: 4 Febrero 2012, 22:40 pm »

¡Buenas!

fgets, te esta leyendo la pulsacion del intro. Eliminalo de la cadena y ya lo tienes:
http://www.cplusplus.com/reference/clibrary/cstdio/fgets/

Por cierto, si no vas a usar el fichero, cierralo antes de salir de la funcion.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
juanperez3214

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema al abrir binario en C
« Respuesta #2 en: 4 Febrero 2012, 23:10 pm »

he hecho lo que me dices pero sigue igual. Tambien he intentado con gets que no toma el intro pero tampoco
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema al abrir binario en C
« Respuesta #3 en: 4 Febrero 2012, 23:14 pm »

¿Seguro que poniendo esto no te va?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int openbin(void);
  5.  
  6. int main(){
  7.  
  8. openbin();
  9. return 0;
  10.  
  11. }
  12.  
  13. int openbin(void){
  14.  
  15.   FILE *pfile;
  16.   char namebin[50];
  17.        printf("Name:\n");
  18.  
  19.        gets(namebin);
  20.   if ((pfile = fopen(namebin, "rb"))== NULL)
  21.   {
  22.      printf("Couldn't open the file\n");
  23.      exit(1);
  24.   }
  25.   printf("The file was opened successfully\n");
  26.  
  27.   return 0;
  28. }
  29.  

Si es eso lo que has puesto, cuando te pida el nombre del archivo en la consola, pon el nombre del fichero seguido de .txt (o la extensión que tenga).
En línea

juanperez3214

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema al abrir binario en C
« Respuesta #4 en: 4 Febrero 2012, 23:16 pm »

estoy en linux, no se si eso importe
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema al abrir binario en C
« Respuesta #5 en: 4 Febrero 2012, 23:20 pm »

Como dije en el otro mensaje. ¿Has probado ya a poner en la consola el nombre del archivo seguido de .txt o la extensión que tenga tu archivo?

Si es así, no se me ocurre qué puede fallar.

Yo uso Windows, pero creo (aunque no estoy seguro) que en este caso es igual.
En línea

juanperez3214

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema al abrir binario en C
« Respuesta #6 en: 4 Febrero 2012, 23:28 pm »

Hombre ya he intentado de todo pero no funca, lo de gets es en forma de prueba pues esta funcion es muy peligrosa
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema al abrir binario en C
« Respuesta #7 en: 4 Febrero 2012, 23:30 pm »

A mí con ese mismo código (el que puse yo, que era el tuyo pero con gets en vez de fgets), me he funcionado bien. Poniendo hola.txt (mi archivo se llama hola). Será entonces porque usas Linux y yo Windows...
En línea

~

Desconectado Desconectado

Mensajes: 85


Ver Perfil WWW
Re: Problema al abrir binario en C
« Respuesta #8 en: 5 Febrero 2012, 00:38 am »

Este programa funciona bien para esa tarea hasta ahora. Toda la información está en los comentarios.

Simplemente usa una función más, que se limita a buscar el carácter '\r' o '\n' y lo modifica directamente en la cadena original, cambiándolo por un carácter nulo '\0'. Ni siquiera se necesita malloc para ese pequeño ajuste de cadena.


Código:
#include <stdio.h>   //printf, fopen, fgets, fclose
#include <stdlib.h>  //exit
#include <string.h>  //strlen



int openbin(void);
void striptrail(char *, size_t);


int main(void)
{
 openbin();
 return 0;
}



int openbin(void)
{
 //Definimos el manejador de archivo y nuestro búfer de cadena:
 ///
  FILE *pfile;
  char namebin[50];


 //Mostramos un mensaje pidiendo un nombre de archivo
 //y leemos dicha entrada de usuario con fgets:
 ///
   printf("Nombre de archivo: ");
   fgets(namebin,sizeof(namebin), stdin);


 //A continuación mostramos el tamaño de la cadena leída
 //con fgets, y luego aplicamos la función para eliminar
 //nuevas líneas/retornos de carro, para preparar la cadena
 //y aprovechamos a mostrar la nueva longitud (si es que se
 //ajustó):
 ///
   printf("Longitud de cadena sin procesar: %d\n",strlen(namebin));

 //Le pasamos directamente el nombre del búfer de cadena, porque
 //este es ya en sí un puntero directo al búfer de cadena:
 ///
   striptrail(namebin, sizeof(namebin));
   printf("Longitud de cadena procesada con 'striptrail': %d\n\n",strlen(namebin));



 //Tratamos de abrir el archivo. Si no se puede abrir, mostramos
 //un error; si se abrió mostramos mensaje de éxito. Después
 //cerramos el manejador de archivo y salimos al sistema.
 ///
   if ((pfile = fopen(namebin, "rb"))== NULL)
   {
    printf("ERROR: No se pudo abrir el archivo.\n");
    exit(1);
   }
   printf("Archivo abierto exitosamente.\n");
   fclose(pfile);

 return 0;
}






//Esta función simple está pensada para usarse con fgets.
//
//Lo que hace es tomar un puntero a una cadena, y el tamaño
//esperado de la cadena.
//
//Entonces busca un carácter de retorno de carro '\n' o nueva
//línea '\n', introducidos por fgets al presionar ENTER.
//
//NOTA: Si no se encuentra ninguno de esos caracteres, entonces
//      el último carácter, al final del búfer de cadena de texto,
//      se reemplaza incondicionalmente por un byte nulo '\0' para
//      terminar la cadena ASCIIZ, por seguridad.
//
//      Es por eso que esta función está diseñada para trabajar con
//      fgets u otro código que guarde '\r' o '\n' al final de la
//      cadena esperada.
//
///
void striptrail(char * tostrip, size_t sizze)
{
 //Tratamos de aplicar optimización de uso de
 //registros de CPU, para mayor velocidad para
 //el contador del bucle:
 ///
   register size_t x=0;



 //Recorremos toda la cadena:
 ///
   for(x=0;x<sizze;x++)
   {
    //Si el carácter que estamos leyendo actualmente es
    //regreso de carro o nueva línea, sabemos que tenemos
    //que cambiarlo por el byte nulo '\0' para indicar
    //el fin de la cadena. Nos detenemos tan pronto como
    //encontremos uno de esos caracteres, regresando de
    //la función de inmediato, para evitar seguir escaneando
    //la cadena si el objetivo ya está cumplido:
    ///
      if(tostrip[x]=='\r' || tostrip[x]=='\n' ||  tostrip[x]=='\0')
      {
       tostrip[x]='\0';
       return;
      }
   }



 //Si x tiene el valor del tamaño esperado del búfer,
 //reemplazamos el carácter en esa posición con un byte
 //nulo para terminar la cadena. Esta línea se puede dejar
 //o eliminar dependiendo de cómo funcione nuestro programa,
 //y si estamos totalmente seguros de que no necesitamos
 //esta "característica de seguridad" (pero vital en este programa):
 ///
  tostrip[x]='\0';
}

« Última modificación: 5 Febrero 2012, 03:21 am por ~ » En línea

Donar con PayPal para que siga trabajando:
https://www.ebay.com/usr/udocproject3

Streams en vivo de programación:
PC 1 - PC 2

http://www.youtube.com/@AltComp126/streams
juanperez3214

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema al abrir binario en C
« Respuesta #9 en: 5 Febrero 2012, 01:10 am »

 muchas gracias por la ayuda, te haz pasado pero sigo teniendo el problema, siempre me va a "ERROR: no se pudo abrir.....". no se si estoy haciendo algo mal pero no los abre.

aunque sigo con el problema aprecio mucho la ayuda gracias
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Abrir imagen en binario « 1 2 »
Programación Visual Basic
xDie 18 5,444 Último mensaje 20 Octubre 2006, 20:54 pm
por soplo
[ code=C++] Conversor binario-decimal-binario « 1 2 »
Programación C/C++
Chonk 11 23,598 Último mensaje 9 Julio 2010, 17:52 pm
por Debci
Urgente problema Arbole binario de busqueda y combinatoria
Programación C/C++
ricardoacosta86 2 3,067 Último mensaje 12 Agosto 2010, 05:06 am
por Beakman
Problema al convertir de binario a hexadecimal (MAC)
Java
xopito 2 5,033 Último mensaje 26 Marzo 2011, 11:43 am
por xopito
Tengo un problema (convertidor a binario)
Java
DarkSorcerer 2 2,817 Último mensaje 2 Septiembre 2012, 03:08 am
por DarkSorcerer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines