如果我关闭一个文件,然后重新打开它,我不能在重新打开它之后向它写入更多数据,但是如果我保持它打开,我可以写入任意多行,然后在完成写入时关闭它。请参见下面的示例。谢谢。
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。
发布于 2016-09-21 02:14:07
您需要设置您的打开模式,以便它附加到文件,而不是在开头写入:
来自f_openFA_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_puts(array, &fil);这适用于在写入模式下长时间打开文件的应用程序,如数据记录器。执行
f_open(&fil, "TEST/test.txt", FA_OPEN_APPEND | FA_WRITE);F之后定期或立即的同步函数
写入功能可以最大限度地降低由于突然停电或无意中移出介质而导致数据丢失的风险。
这几乎涵盖了我能想到的每一种情况,为什么你可能会反复打开和关闭一个文件来追加数据,所以这可能是解决你的问题的更好的解决方案。
https://stackoverflow.com/questions/39560704
复制相似问题