Estoy trabajando en un programa simple de división/fusión de archivos en el lenguaje de programación C. El problema es que, por algún motivo, fopen devuelve NULL y, debido a eso, mi programa se bloquea en la instrucción fwrite. ¿Cómo puedo solucionar esto?¿Por qué 'fopen' devuelve un puntero NULL?
Aquí está el archivo C:
int SplitFile(char* filename, char* output, size_t size)
{
char current_file_name[256];
int file_count = 0, i = 0;
FILE *file = fopen(filename, "rb");
printf("split %s into chunks of %d named\n", filename, size);
if (!file)
return E_BAD_SOURCE;
else
{
output = (char *) malloc(size * sizeof(char));
if (output == NULL)
return E_NO_MEMORY;
else
{
int bytes_read = 0;
FILE *outFile;
do
{
bytes_read = fread(output, sizeof(char), size, file);
sprintf(current_file_name, "%s%04lu\n", "part", file_count++);
outFile = fopen (current_file_name, "wb"); // THIS RETURNS NULL
fwrite(output, sizeof(char), bytes_read, outFile); //CRASHES ON THIS LINE
}
while (bytes_read > 0)
;
//fclose(outFile);
}
}
fclose(file);
printf("...\n");
return 0;
}
Snarky - comprobar el archivo abierto antes de intentar escribir en él. La verdadera respuesta es que probablemente no tenga los permisos del sistema de archivos o que esté en una ruta de carpeta que no existe – EnabrenTane
¿Qué error se almacena en 'errno'? Simplemente agregue 'if (! OutFile) perror (" fopen ");' y deje que la biblioteca le explique por qué falló. :) – sarnold
in errno Estoy recibiendo fopen: argumento inválido – k787