Данные перезаписываются при открытии файла с использованием FatFs
Если я закрою файл и затем снова открою его, я не смогу записать в него больше данных после его открытия, но если я оставлю его открытым, я могу написать столько строк, сколько захочу, а затем закрою его, когда закончу писать. Смотрите пример ниже. Благодарю.
if (f_mount(&FatFs, "", 1) == FR_OK) {
f_mkdir ("TEST");
count = 0;
while(count < 200){
if(f_open(&fil, "TEST/test.txt", FA_OPEN_ALWAYS | FA_WRITE) != FR_OK){
break;
}
else{
sprintf(array,"This is file entry number: %d\r\n",count);
f_puts(array, &fil);
if(f_close(&fil) != FR_OK){
break;
}
}
count++;
}
f_mount(0, "", 1);
}
Он будет считать до максимального значения, но будет записывать только последнюю запись, которая равна 199.
1 ответ
Вам нужно установить режим открытия так, чтобы он добавлялся в файл, а не записывался в начале:
От f_open
FA_OPEN_APPEND
Такой же какFA_OPEN_ALWAYS
кроме указателя чтения / записи устанавливается конец файла.
Когда вы открываете файл с этим:
f_open(&fil, "TEST/test.txt", FA_OPEN_ALWAYS | FA_WRITE);
вы открываете файл для записи с указателем записи в начале файла, поэтому, когда вы идете для записи в файл с помощью:
f_puts(array, &fil);
Вы перезаписываете предыдущие данные в файле.
Если вы измените свой открытый на:
f_open(&fil, "TEST/test.txt", FA_OPEN_APPEND | FA_WRITE);
тогда вы должны получить желаемое поведение. Однако есть исключение, и каждый раз, когда вы запускаете это, вы продолжаете добавлять файл. Если это нежелательно, вам может понадобиться сначала удалить файл или сначала открыть его с помощью FA_OPEN_ALWAYS
а затем заново открывать каждый проход с FA_OPEN_APPEND
,
В зависимости от того, что вы пытаетесь сделать, вы должны взглянуть на f_sync
, который выполнит все очистки и пишет, что f_close
будет выполнять, но держит файл открытым. Из документации:
Это подходит для приложений, которые долго открывают файлы в режиме записи, таких как регистратор данных. Выполнение функции f_sync периодического или немедленного действия после функции f_write может минимизировать риск потери данных из-за внезапного отключения или непреднамеренного удаления носителя.
Это будет охватывать почти все случаи, о которых я могу подумать, почему вы можете многократно открывать и закрывать файл для добавления данных, так что это может быть лучшим решением вашей проблемы.