Well, I'm experimenting a bit with the files using C language. But when I ask the user to enter the name of the file to modify and its content, the console closes and doesn't respond... I thought it could be a memory problem, but I'm not sure
int n, de_1;
char * dir, * con, * r_dir;
printf("(nuevo file = 1, agregar texto en file = 2, sobrescribir file = 3, limpiar file = 4, renombrar file = 5, eliminar file = 6)\n");
scanf("%i", &n);
switch(n)
{
case 1:
printf("\nEscribe tu nombre de fichero para ser creado:\n"); scanf("%s", dir); c_file(dir);
exit(-1);
break;
case 2:
printf("\nNombre del fichero para ser sobreescribido: "); scanf("%s", dir);
printf("\nContenido del fichero: "); scanf("%s", con); swfile(dir, con);
exit(-1);
break;
case 3:
printf("\nNombre del fichero para agregar contenido: "); scanf("%s", dir);
printf("\nContenido del fichero: "); scanf("%s", con); wrfile(dir, con);
exit(-1);
break;
case 4:
printf("\nNombre del fichero: ");
scanf("%s", dir);
printf("\nLimpiando archivo...");
sleep(2000);
d_file(dir);
printf("\nEliminamos su contenido"); exit(-1);
break;
case 5:
printf("\nNombre del fichero a cambiar y nombre nuevo: ");
scanf("%s %s", dir, r_dir);
rename(dir, r_dir);
exit(-1);
break;
case 6:
printf("\nNombre del fichero: ");
scanf("%s", dir);
remove(dir);
exit(-1);
break;
default:
printf("Error");
exit(-1);
break;
}
return 0;
I am new to C and I am learning it, the code that I passed is from the main function. I also clarify that functions like c_file or swfile are proprietary functions that you create in another file and attach as a header
bool vr_file(FILE * fp) // Saber si un fichero existe o no
{
if (fp != NULL) {
return true;
} else {
return false;
}
return 0;
}
char c_file(char * dir) //Comprueba si existe el fichero y si NO existe procede a crearlo
{FILE * fp;
fp = fopen(dir, "r");
if (vr_file(fp) == false) {
fp = fopen(dir, "w+");
} else {
return 1;
}
fclose(fp);
return 0;
}
char rd_file(char * dir) //Lee un fichero y devuelve un conjunto de caracteres
{char * texto;
FILE * fp;
fp = fopen(dir, "r");
if (vr_file(fp) == true) {
while((texto = fgetc(fp)) != EOF)
{
printf("%c", texto);
}
} else {
printf("No hay nada escrito");
}
fclose(fp);
return 0;
}
char wrfile(char * dir, char * text) //Crea un fichero si no existe y SI sobreescribe contenido
{ FILE * fp;
fp = fopen(dir, "w");
if (vr_file(fp) == true) {
fputs(text, fp);
} else {
c_file(fp);
fputs(text, fp);
}
fclose(fp);
return 0;
}
char swfile(char * dir, char * text) // Crea un fichero si no existe, y si existe NO sobreescribe contenido
{FILE * fp;
fp = fopen(dir, "a");
if (vr_file(fp)) {
fseek(fp, 4, SEEK_END);
fputs(text, fp);
}
fclose(fp);
return 0;
}
int size_f(char * dir) //Devuelve un entero en bytes del peso del fichero
{FILE * fp;
fp = fopen(dir, "r");
if (vr_file(fp)) {
fseek(fp, 0, SEEK_END);
return ftell(fp);
}
return 0;
}
char d_file(char * dir) //Limpia el contenido del fichero
{FILE * fp;
fp = fopen(dir, "w");
if (vr_file(fp)) {
fwrite("", 0, 0, fp);
}
fclose(fp);
return 0;
}
Indeed, it was a memory problem that caused this roll. The only thing I did was allocate memory space using the malloc function in stdlib.h. Then save in that memory space the data entered by the user to finally make the changes in the file...
Pre-allocate memory using the malloc function by giving it a space of 32 * 4 bytes.