FatFs路徑名稱規則 字符集和卷管理

2021-08-05 23:11:05 字數 3326 閱讀 5705

本文基於v0.12b版本

fatfs模組路徑名格式與dos/windos檔名規格類似,如下所示:

[驅動器:] [/]目錄/檔案

fatfs模組支援長檔名(lfn)和8.3格式檔案名(sfn)。當lfn特性使能(_use_lfn>0)後,lfn才能使用。子目錄使用乙個』\』或』/』隔開,這和dos/windows的api相同。重複的分隔符會被跳過或忽略。乙個不同之處是,fatfs邏輯驅動使用乙個帶冒號的數字表示。當遺漏驅動號,fatfs模組假設使用的是預設驅動(0或者當前驅動)。

控制字元(\0~\0x1f)被當做路徑名的結尾。對於長檔名,最開始和中間的空格屬於路徑名的有效字元,但是對於短檔名,空格會被認為是路徑名的結束。無論是長檔名還是短檔名,結尾的空格和』.』會被忽略。

預設配置下(_fs_rpath==0,使用絕對路徑)不像基於作業系統的檔案系統,它沒有當前目錄的概念。所有卷上的物件必須使用從根目錄開始的絕對路徑(完整路徑),不允許點目錄名(「.」、「..」)。標題分隔符(heading separator,比如「0:\」)被忽略,可以存在也可以省略。預設驅動器號為0。

當使能相對路徑時(_fs_rpath==1),如果標題分隔符存在,則指定的路徑名從根目錄開始;否則路徑名從函式f_chdir(改變當前目錄,需要_fs_rpath=1)設定的當前目錄開始。在路徑名中也允許點名字。預設驅動器由函式f_chdrive指定。

當_str_volume_id=1使能字串卷標識時,可以在路徑名中使用預先定義的字串作為驅動器識別符號,比如」sd:file1.txt」、」ram:swapfile.dat」以及類似與dos/windows風格的碟符。特別注意:在這個版本中雙點(「..」)目錄名不能在exfat卷中表示父目錄,單點目錄名仍可使用。

fatfs檔案系統中,檔名的合法字符集為:0-9 a-z ! # $ % & ` ( ) - @ ^ _ 』 ~和擴充套件字符集(\x80-\xff)。如果使能長檔名,合法的檔名字元還有空格和+ , ; = [ ],並且空格可以放在檔名的開始和中間位置(短檔名不允許檔名中有空格)。

fatfs對卷上的物件名大小寫不敏感,比如file.txt、file.txt和file.txt這三個名字對fatfs來說是相同的。這個規則同樣適合擴充套件字符集。當在fat卷上建立物件時,如果使用短檔名,則檔名字母被轉換為大寫字母;如果使用長檔名,則保持原始的檔名,不作轉換。

使用雙位元組字符集(dbcs)的ms-dos系統,對擴充套件字符集大小寫是敏感的。為了符合這種風格,fatfs僅在使用雙位元組非長檔名時對擴充套件字符集大小寫敏感。如果配置為使用長檔名,fatfs對所有字符集不敏感(windows nt風格)。在windows系統下使用擴充套件字符集在非長檔名、非雙位元組字符集配置的卷上建立乙個物件時,會產生相容性問題。因此在fat卷上使用雙位元組擴充套件字符集的物件不應該用在其它系統中。

路徑名可以為ansi/oem編碼和unicode編碼中的一種,取決於配置選項。指定的路徑名引數型別定義為tchar,預設情況下對應關鍵字char。在ansi/oem模式下,路徑的名稱字串的編碼由巨集_code_page設定。當_lfn_unicode設定為1時,表示使用unicode編碼。此時tchar定義為wchar,以便支援unicode(utf-16編碼)。在這種情況下,unicode字元,比如✟☪ ☸ ☭都可以用作路徑名。

unicode字符集會影響字串函式的資料型別和編碼方式。使用巨集_t(s)和_text(s)定義的字串常量能夠自動選擇使用ansi/oem或者unicode編碼。

[objc]view plain

copy

print?

f_open(fp, 「filename.txt」,fa_read);      /* ansi/oem 字串 */

f_open(fp, l」filename.txt」,fa_read);     /* unicode 字串 */

f_open(fp, _t(」filename.txt」),fa_read);   /* 由配置巨集選擇 */

f_open(fp, "filename.txt",fa_read);      /* ansi/oem 字串 */

f_open(fp, l"filename.txt",fa_read); /* unicode 字串 */

f_open(fp, _t("filename.txt"),fa_read); /* 由配置巨集選擇 */

每個卷(邏輯驅動器)都有必須有乙個檔案系統物件,它通過函式f_mount向fat模組註冊或解除註冊。預設情況下乙個物理驅動器上只能有乙個邏輯驅動器,並且驅動號相同。比如物理驅動器0上只能有乙個邏輯驅動器0。f_mount函式會讀取啟動扇區或分割槽來檢查物理裝置上是否是fat檔案系統,對於sfd,會檢查扇區0;對於fdisk,會檢查第1分割槽、第2分割槽、第3分割槽和第4分割槽。

如果巨集_multi_partition==1,表示1個物理驅動器上可以有多個邏輯驅動器,這些邏輯驅動器和分割槽必須預先定義在分割槽解析表voltopart中。目前版本在同一物理驅動器上最多支援4個邏輯分割槽。

[objc]view plain

copy

print?

/* 舉例:邏輯驅動器0-2繫結在三個物理驅動器0上的三個分割槽中

邏輯驅動器3繫結在物理驅動器1上*/

partition voltopart = ,     /* 「0:」==> physical drive 0, 1st partition */

,     /* 「1:」==> physical drive 0, 2nd partition */

,     /* 「2:」==> physical drive 0, 3rd partition */

/* 「3:」==> physical drive 1, auto detection */

};  

/* 舉例:邏輯驅動器0-2繫結在三個物理驅動器0上的三個分割槽中

邏輯驅動器3繫結在物理驅動器1上*/

FatFs路徑名稱規則 字符集和卷管理

本文基於v0.12b版本 fatfs模組路徑名格式與dos windos檔名規格類似,如下所示 驅動器 目錄 檔案 fatfs模組支援長檔名 lfn 和8.3格式檔案名 sfn 當lfn特性使能 use lfn 0 後,lfn才能使用。子目錄使用乙個 或 隔開,這和dos windows的api相同...

字符集和校對規則

簡要說明 字符集和校對規則 字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。mysql在collation提供較強的支援,oracel在這方面沒查到相應的資料。校對規則一般分為兩類 binary collation,二元法,直接比較字元的編碼,可以認為是區分大小寫的,因為字符集中...

MySQL字符集和校對規則

本文對mysql支援的常規字符集和校對規則作了乙個簡單的說明,並介紹了mysql常用字符集變數的含義和設定,字符集變數的不恰當設定有可能導致包括亂碼在內的諸多問題。字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。mysql 伺服器能夠支援多種字符集,可以使用 show chara...