Fatfs文件系所有函数总结
Fatfs文件系統常用函數:f_mount、f_open、f_close、f_read、f_write、f_lseek、f_truncate、f_sync、f_opendir?
?
FatFS是一個為小型嵌入式系統設計的通用FAT(File Allocation Table)文件系統模塊。FatFs 的編寫遵循ANSI C,并且完全與磁盤I/O層分開。因此,它獨立(不依賴)于硬件架構。它可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM, Z80, 68K 等等,而不需要做任何修改。
特點:Windows兼容的FAT文件系統,不依賴于平臺,易于移植,代碼和工作區占用空間非常小,多種配置選項:多卷(物理驅動器和分區)、多ANSI/OEM代碼頁,包括DBCS、在ANSI/OEM或Unicode中長文件名的支持、RTOS的支持、多扇區大小的支持、只讀,最少API,I/O緩沖區。
應用程序接口:
FatFs 模塊為應用程序提供了下列函數,這些函數描述了FatFs能對FAT卷執行哪些操作。
1.f_mount:在FatFs模塊上注冊/注銷一個工作區(文件系統對象)
2.f_open:創建/打開一個用于訪問文件的文件對象
3.f_close:關閉一個打開的文件
4.f_read:從一個文件讀取數據
5.f_write:寫入數據到一個文件
6.f_lseek:移動一個打開的文件對象的文件讀/寫指針。也可以被用來擴展文件大小(簇預分配)。
7.f_truncate:截斷文件大小
8.f_sync:沖洗一個寫文件的緩存信息
9.f_opendir:打開一個目錄
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
1.f_mount:在FatFs模塊上注冊/注銷一個工作區(文件系統對象)
原型:FRESULT f_mount?(?BYTE Drive,?FATFS*?FileSystemObject?);
參數:Drive:注冊/注銷工作區的邏輯驅動器號(0-9)。FileSystemObject工作區(文件系統對象)指針。
返回值:FR_OK (0):函數成功。FR_INVALID_DRIVE:驅動器號無效
描述:f_mount函數在FatFs模塊上注冊/注銷一個工作區。在使用任何其他文件函數之前,必須使用該函數為每個卷注冊一個工作區。要注銷一個工作區,只要指定FileSystemObject為NULL即可,然后該工作區可以被丟棄。該函數只初始化給定的工作區,以及將該工作區的地址注冊到內部表中,不訪問磁盤I/O層。卷裝入過程是在f_mount函數后或存儲介質改變后的第一次文件訪問時完成的。
2.f_open:創建/打開一個用于訪問文件的文件對象
原型:FRESULT f_open?(?FIL*?FileObject,?const?XCHAR*?FileName,BYTE ModeFlags?);
參數:FileObject:將被創建的文件對象結構的指針。FileName:NULL結尾的字符串指針,該字符串指定了將被創建或打開的文件名。ModeFlags:指定文件的訪問類型和打開方法。它是由下列標志的一個組合指定的。
注意:當 _FS_READONLY == 1 時,模式標志 FA_WRITE, FA_CREATE_ALWAYS, FA_CREATE_NEW, FA_OPEN_ALWAYS 是無效的。
返回值:
FR_OK (0):函數成功,該文件對象有效。
FR_NO_FILE:找不到該文件。
FR_NO_PATH:找不到該路徑。
FR_INVALID_NAME:文件名無效。
FR_INVALID_DRIVE:驅動器號無效。
FR_EXIST:該文件已存在。
FR_DENIED:由于下列原因,所需的訪問被拒絕:
(1)以寫模式打開一個只讀文件。
(2)由于存在一個同名的只讀文件或目錄,而導致文件無法被創建。
(3)由于目錄表或磁盤已滿,而導致文件無法被創建。
FR_NOT_READY:由于驅動器中沒有存儲介質或任何其他原因,而導致磁盤驅動器無法工作。
FR_WRITE_PROTECTED:在存儲介質被寫保護的情況下,以寫模式打開或創建文件對象。
FR_DISK_ERR:由于底層磁盤I/O接口函數中的一個錯誤,而導致該函數失敗。
FR_INT_ERR:由于一個錯誤的FAT結構或一個內部錯誤,而導致該函數失敗。
FR_NOT_ENABLED:邏輯驅動器沒有工作區。
FR_NO_FILESYSTEM:磁盤上沒有有效地FAT卷。
描述:如果函數成功,則創建一個文件對象。該文件對象被后續的讀/寫函數用來訪問文件。如果想要關閉一個打開的文件對象,則使用f_close函數。如果不關閉修改后的文件,那么文件可能會崩潰。在使用任何文件函數之前,必須使用f_mount函數為驅動器注冊一個工作區。只有這樣,其他文件函數才能正常工作。
3.?f_close:關閉一個打開的文件
原型:FRESULT f_close?(?FIL*?FileObject?);
參數:FileObject:指向將被關閉的已打開的文件對象結構的指針。
返回值:
FR_OK (0) 文件對象已被成功關閉。
>FR_DISK_ERR 由于底層磁盤I/O函數中的錯誤,而導致該函數失敗。
FR_INT_ERR:由于一個錯誤的FAT結構或一個內部錯誤,而導致該函數失敗。
FR_NOT_READY:由于驅動器中沒有存儲介質或任何其他原因,而導致磁盤驅動器無法工作。
FR_INVALID_OBJECT:文件對象無效。
描述:f_close函數關閉一個打開的文件對象。無論向文件寫入任何數據,文件的緩存信息都將被寫回到磁盤。該函數成功后,文件對象不再有效,并且可以被丟棄。如果文件對象是在只讀模式下打開的,不需要使用該函數,也能被丟棄。
4.?f_read:從一個文件讀取數據
原型:FRESULT f_read?(?FIL*?FileObject,?void*?Buffer,?首先要定義一個至少512的內存 UINT ByteToRead,?UINT*?ByteRead?);
參數:
FileObject:指向將被讀取的已打開的文件對象結構的指針。
Buffer:指向存儲讀取數據的緩沖區的指針。
ByteToRead:要讀取的字節數,UINT范圍內。
ByteRead:指向返回已讀取字節數的UINT變量的指針。在調用該函數后,無論結果如何,數值都是有效的。
返回值:
FR_OK (0):函數成功。
FR_DENIED:由于文件是以非讀模式打開的,而導致該函數被拒絕。
FR_DISK_ERR:由于底層磁盤I/O函數中的錯誤,而導致該函數失敗。
FR_INT_ERR:由于一個錯誤的FAT結構或一個內部錯誤,而導致該函數失敗。
FR_NOT_READY:由于驅動器中沒有存儲介質或任何其他原因,而導致磁盤驅動器無法工作。
FR_INVALID_OBJECT:?文件對象無效。
描述:文件對象中的讀/寫指針以已讀取字節數增加。該函數成功后,應該檢查 *ByteRead 來檢測文件是否結束。在讀操作過程中,一旦 *ByteRead < ByteToRead ,則讀/寫指針到達了文件結束位置。
5.?f_write:寫入數據到一個文件FRESULT
原型:f_write?(?FIL*?FileObject,?const?void*?Buffer,?UINT?ByteToWrite,UINT*?ByteWritten?);
參數:
FileObject:指向將被寫入的已打開的文件對象結構的指針。
Buffer:指向存儲寫入數據的緩沖區的指針。
ByteToRead:要寫入的字節數,UINT范圍內。
ByteRead:指向返回已寫入字節數的UINT變量的指針。在調用該函數后,無論結果如何,數值都是有效的。
返回值:
FR_OK (0):函數成功。
FR_DENIED:由于文件是以非寫模式打開的,而導致該函數被拒絕。
FR_DISK_ERR:由于底層磁盤I/O函數中的錯誤,而導致該函數失敗。
FR_INT_ERR:由于一個錯誤的FAT結構或一個內部錯誤,而導致該函數失敗。
FR_NOT_READY:由于驅動器中沒有存儲介質或任何其他原因,而導致磁盤驅動器無法工作。
FR_INVALID_OBJECT 文件對象無效。
描述:文件對象中的讀/寫指針以已寫入字節數增加。該函數成功后,應該檢查 *ByteWritten 來檢測磁盤是否已滿。在寫操作過程中,一旦 *ByteWritten < *ByteToWritten ,則意味著該卷已滿。
6.?f_lseek:移動一個打開的文件對象的文件讀/寫指針。也可以被用來擴展文件大小(簇預分配)。
原型:FRESULT f_lseek?(?FIL*?FileObject,?DWORD Offset?);
參數:
FileObject:打開的文件對象的指針
Offset:相對于文件起始處的字節數
返回值:
FR_OK (0):函數成功。
FR_DISK_ERR:由于底層磁盤I/O函數中的錯誤,而導致該函數失敗。
FR_INT_ERR:由于一個錯誤的FAT結構或一個內部錯誤,而導致該函數失敗。
FR_NOT_READY:由于驅動器中沒有存儲介質或任何其他原因,而導致磁盤驅動器無法工作。
FR_INVALID_OBJECT:文件對象無效。
描述:f_lseek函數當FS_MINIMIZE <= 2時可用。offset只能被指定為相對于文件起始處的字節數。當在寫模式下指定了一個超過文件大小的offset時,文件的大小將被擴展,并且該擴展的區域中的數據是未定義的。這適用于為快速寫操作迅速地創建一個大的文件。f_lseek函數成功后,為了確保讀/寫指針已被正確地移動,必須檢查文件對象中的成員fptr。如果fptr不是所期望的值,則發生了下列情況之一。
(1)文件結束。指定的offset被鉗在文件大小,因為文件已被以只讀模式打開。
(2)磁盤滿。卷上沒有足夠的空閑空間去擴展文件大小。
用法:其實這個函數可以解決文件從頭開始讀的問題,如果你想打開一個文件,讀取里面的內容,但又不想從頭開始讀,那么你可以使用這個函數來解決
7.?f_truncate:截斷文件大小
原型:FRESULT f_truncate?(?FIL*?FileObject?);
參數:FileObject:待截斷的打開的文件對象的指針。
返回值:
FR_OK (0:函數成功。
FR_DENIED:由于文件是以非寫模式打開的,而導致該函數被拒絕。
FR_DISK_ERR:由于底層磁盤I/O函數中的錯誤,而導致該函數失敗。
FR_INT_ERR:由于一個錯誤的FAT結構或一個內部錯誤,而導致該函數失敗。
FR_NOT_READY:由于驅動器中沒有存儲介質或任何其他原因,而導致磁盤驅動器無法工作。
FR_INVALID_OBJECT 文件對象無效。
描述:f_truncate函數當_FS_READONLY == 0 并且 _FS_MINIMIZE == 0時可用。f_truncate函數截斷文件到當前的文件讀/寫指針。當文件讀/寫指針已經指向文件結束時,該函數不起作用。
8.?f_sync:沖洗一個寫文件的緩存信息
原型:FRESULT f_sync?(?FIL*?FileObject?);
參數:FileObject:待沖洗的打開的文件對象的指針。
返回值:
FR_OK (0):函數成功。
FR_DISK_ERR:由于底層磁盤I/O函數中的錯誤,而導致該函數失敗。
FR_INT_ERR:由于一個錯誤的FAT結構或一個內部錯誤,而導致該函數失敗。
FR_NOT_READY:由于驅動器中沒有存儲介質或任何其他原因,而導致磁盤驅動器無法工作。
FR_INVALID_OBJECT 文件對象無效。
描述:f_sync函數當_FS_READONLY == 0時可用。f_sync函數和f_close函數執行同樣的過程,但是文件仍處于打開狀態,并且可以繼續對文件執行讀/寫/移動指針操作。這適用于以寫模式長時間打開文件,比如數據記錄器。定期的或f_write后立即執行f_sync可以將由于突然斷電或移去磁盤而導致數據丟失的風險最小化。在f_close前立即執行f_sync沒有作用,因為在f_close中執行了f_sync。換句話說,這兩個函數的差異就是文件對象是不是無效的。
9.?f_opendir:打開一個目錄
原型:FRESULT f_opendir?(?DIR*?DirObject,?const?XCHAR*?DirName?);
參數:
DirObject:待創建的空白目錄對象的指針。
DirName:'\0'結尾的字符串指針,該字符串指定了將被打開的目錄名。
返回值:
FR_OK (0):函數成功,目錄對象被創建。該目錄對象被后續調用,用來讀取目錄項。
FR_NO_PATH:找不到路徑。
FR_INVALID_NAME:路徑名無效。
FR_INVALID_DRIVE:驅動器號無效。
FR_NOT_READY:由于驅動器中沒有存儲介質或任何其他原因,而導致磁盤驅動器無法工作。
FR_DISK_ERR:由于底層磁盤I/O函數中的錯誤,而導致該函數失敗。
FR_INT_ERR:由于一個錯誤的FAT結構或一個內部錯誤,而導致該函數失敗。
FR_NOT_ENABLED:邏輯驅動器沒有工作區。
FR_NO_FILESYSTEM:磁盤上沒有有效的FAT卷。
描述:f_opendir函數當_FS_MINIMIZE <= 1時可用。f_opendir函數打開一個已存在的目錄,并為后續的調用創建一個目錄對象。該目錄對象結構可以在任何時候不經任何步驟而被丟棄。?
?
總結
以上是生活随笔為你收集整理的Fatfs文件系所有函数总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32---SPI通信的总结(库函数
- 下一篇: FATFS里的FILINFO结构体详解