我想把一個文本內容讀出來,修改完以後在寫進去。測試已經可以讀出來修改了,但是寫進去的時候遇到了一些問題,
開始的時候沒有移動文件指針,寫進去的數據在原文文件後面追加了。後來使用f_lseek(f_check,0);把指針移到最開始,然後在寫進去,這次發現如果寫的文件長度小於原來的文件長度,會造成原來的文件留下一點,沒有完全覆蓋。
後來查看FATFS的文檔發現了一個截斷文件函數:
FRESULT f_truncate (
FIL* FileObject /* Pointer to the file object */
);
函數說明:
1. 此函數可以在將文件在當前指針處截斷
2. 參數說明:
a) *FileObject : 指向文件對象結構體的指針
3. 此函數可以截斷文件,也可以延長文件長度
操作示例:
res = f_open (&fsrc ,"news/news.txt", FA_WRITE);
res = f_lseek (&fsrc , 60);//指針指向第 60 個字節
res = f_truncate (&fsrc );//將文件在此截斷
res = f_sync ( &fsrc );//關閉文件
我工程使用示例:
//移動文件到開頭
f_lseek(f_check,0);
res = f_write(f_check,(char*)g_arrUart2RecvBuf, (UINT)strlen((char*)g_arrUart2RecvBuf), (UINT*)&write); //寫入目的文件
if(write<read)
{
res = f_lseek (f_check , write); //指針移動
res = f_truncate (f_check ); //截斷後面的文件
res = f_sync ( f_check ); //刷新關閉文件
}
else
{
f_close(f_check); //關閉文件
}
這樣在修改完內容後寫進後判斷一下是否需要截斷文檔後面無效的數據。