Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Hacer fichero relativo en C

Estas en el tema de Hacer fichero relativo en C en el foro de C/C++ en Foros del Web. Hola, tengo un problema con un proyecto que estoy haciendo. Tengo que crear un fichero relativo en lenguaje C, que dado un numero de una ...
  #1 (permalink)  
Antiguo 18/05/2010, 05:52
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 16 años
Puntos: 0
Hacer fichero relativo en C

Hola,
tengo un problema con un proyecto que estoy haciendo. Tengo que crear un fichero relativo en lenguaje C, que dado un numero de una comanda me lo transforme en string y pueda crear el nombre del fichero.
Os pongo un poco de código para que veais lo que tengo.
En abrir el archivo relativo, me da error (ERROR: en abrir el fichero en modo Inicio) y no se como solucionarlo, a ver si alguien sabe y me puede ayudar.



Código:
void escriure_linia (){
	//variables
	FILE *fr;	// FITXER_REL T_producte
	T_linia rr;
	int xr;	//para mirar error del fp
	int num;	//per saber el numero de la comanda
        int flag; // boleano
	char num_str[255];
	struct ffblk ffblk;

	/*Antes de inserir una nueva linia, tenemos que comprobar si hay algun producto en la tabla de productos */
	flag=si_productes();
	if (flag==0){
		printf("ERROR: la taula PRODUCTES esta vacia");
		getch();
		exit(1);
	}

	/*Preguntaremos en que comanda queremos inserir la linia*/
	printf ("Indica el numero de comanda que quieres inserir linia: ");
	fflush (stdin);
	scanf ("%d", &num);

	/*comenzamos a mirar si el fichero relativo de linia existe o no, si no existe lo crearemos en modo Inicio 'I', si en canvio existe, lo abriremos en modo de actualizacion*/
	itoa(num,num_str,10);
	xr=findfirst("lin+num_str+.txt",&ffblk,FA_ARCH);
	if (xr!=0){
		xr=obrir_frl(&fr,"lin+num_str+.txt",'I'
		if (xr!=0){
			printf("ERROR: en abrir el fichero en modo Inicio");
			getch();
			exit(1);
		}
	}else{
		xr=obrir_frl(&fr,"lin+num_str+.txt",'A');
		if (xr!=0){
			printf("ERROR: en abrir el fichero para actualizarlo");
			getch();
			exit(1);
		}
  #2 (permalink)  
Antiguo 18/05/2010, 15:42
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Hacer fichero relativo en C

podrias poner el código de obrir_frl
  #3 (permalink)  
Antiguo 19/05/2010, 06:04
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 16 años
Puntos: 0
Respuesta: Hacer fichero relativo en C

Aqui lo tienes.

Código:
int obrir_frl(FILE **f,char nom[12],char mode)
{
	if(mode=='I')
	{
		*f=fopen(nom,"w+b");
	}
	else if(mode=='A')
	{
		*f=fopen(nom,"r+b");
	}
	else if(mode=='C')
	{
		*f=fopen(nom,"rb");
	}
	else
	{
		return -10;
	}
	if(*f==NULL)
	{
		return -10;
	}
	return 0;
}
  #4 (permalink)  
Antiguo 19/05/2010, 09:14
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Hacer fichero relativo en C

1. Cuando vayas a utilizar varios if con enteros o caracteres(no cadenas de caracteres) utiliza switch.
2.Al parecer no tienes ningun error corri en mi maquina parte de tu código y a mi no me marca el error que describes
3. si lo que entiendo esta bien, y lo que quieres hacer que tu nombre se llame linHOLA.txt. Entoces debes utilizar las funciones strcpy, strcat para concatetar las cadenas.
Si observas ademas aqui te falta cerrar un parentesis.
xr=obrir_frl(&fr,"lin+num_str+.txt",'I'
  #5 (permalink)  
Antiguo 19/05/2010, 09:37
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 16 años
Puntos: 0
Respuesta: Hacer fichero relativo en C

Hola de nuevo,
si, lo del parentesis, lo he borrado sin querer al traducir todo el texto en castellano y se me ha escapado la mano.

El nombre del fichero tiene que ser "lin50.txt" o "lin30.txt"... tengo que pasar de numero a string, por eso uso el itoa().

Cuando ejecuto la función, en vez de abrir bien el fichero, me salta al error de abrir. No entiendo como a ti te va. Me lo volveré a mirar.
Gracias

Etiquetas: fichero, itoa, pseudocodigo, relativo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:50.