C 使用FATF的f_printf进行评估时出错,但f_write可以正常工作

C 使用FATF的f_printf进行评估时出错,但f_write可以正常工作,c,stm32,fatfs,C,Stm32,Fatfs,我有一小段代码,可以打开一个文件,读取一个数字,添加一个数字,然后将其写回文件。 当我使用f\u write时,它工作正常,但是f\u open返回FR\u INT\u ERR。 我使用的是R0.12c版本。 生成错误的代码: FIL indexFile; char chars[10] = {0}; uint16_t indexNumber = 0; FRESULT fr; fr = f_open(&indexFile, INDEX_NAME, FA_READ | FA_WRITE |

我有一小段代码,可以打开一个文件,读取一个数字,添加一个数字,然后将其写回文件。 当我使用
f\u write
时,它工作正常,但是
f\u open
返回
FR\u INT\u ERR
。 我使用的是R0.12c版本。 生成错误的代码:

FIL indexFile;
char chars[10] = {0};
uint16_t indexNumber = 0;
FRESULT fr;
fr = f_open(&indexFile, INDEX_NAME, FA_READ | FA_WRITE | FA_OPEN_EXISTING);
fr = f_read(&indexFile, &chars, 10, &br);
indexNumber = atoi(chars);
fr = f_lseek(&indexFile, 0);
fr = f_printf(&indexFile, "%d", indexNumber+1);  // produces assertion error
if (fr != FR_OK) printf("Something went wrong");
但如果我更改
fr=f_printf(&indexFile,“%d”,indexNumber+1)对于以下情况,它不会投诉:

char stringBuffer[5];
sprintf(stringBuffer, "%d", indexNumber+1);
UINT bw;
fr = f_write(&indexFile, stringBuffer, strlen(stringBuffer), &bw);
if (fr != FR_OK || strlen(stringBuffer) != bw) printf("something went wrong");
虽然我可以继续使用第二种方法,但我是那种需要了解问题所在的人


顺便说一句:我使用STM32我相信
f_write
确实返回
FRESULT
,但是
f_printf
将返回一个
int
,指示写入的字符数。因此,将
F_OK
作为返回进行检查是没有意义的。您需要根据输入格式字符串进行断言


编辑:根据@KamilCuk注释,失败时将返回EOF(-1),因此请对此进行测试。

From:
成功写入字符串时,它将返回写入文件的字符编码单元数。由于磁盘已满或任何错误导致功能失败时,将返回EOF(-1)。
您完全正确。文档中明确提到了这一点,我不知道为什么要检查
FRESULT