Sto lavorando ad un semplice programma di splitter/merger di file nel linguaggio di programmazione C. Il problema è che, per qualche motivo, fopen restituisce NULL e, a causa di ciò, il mio programma si arresta in modo anomalo all'istruzione fwrite. Come posso risolvere questo?Perché "fopen" restituisce un puntatore NULL?
Ecco il file 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 - verificare il file aperto prima di provare a scrivere. La vera risposta è che probabilmente non hai i permessi del file system o è in un percorso di cartella che non esiste – EnabrenTane
Quale errore è memorizzato in 'errno'? Basta aggiungere 'if (! OutFile) perror (" fopen ");' e lasciare che la libreria ti dica perché ha fallito. :) – sarnold
in errno Sto diventando fopen: Argomento non valido – k787