Pracuję nad prostym programem dzielenia plików/łączenia w języku programowania C. Problem polega na tym, że z jakiegoś powodu fopen zwraca NULL, a z tego powodu mój program ulega awarii na oświadczeniu fwrite. Jak to naprawić?Dlaczego "fopen" zwraca wskaźnik NULL?
Tutaj jest plik 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 - sprawdzić plik otwierany przed spróbować napisać do niego. Prawdziwa odpowiedź brzmi: prawdopodobnie nie masz uprawnień do systemu plików lub znajduje się w ścieżce do folderu, która nie istnieje – EnabrenTane
Jaki błąd jest zapisany w 'errno'? Po prostu dodaj 'if (! OutFile) perror (" fopen ");' i pozwól bibliotece powiedzieć dlaczego się nie udało. :) – sarnold
w errno Dostaję fopen: nieważny argument – k787