CPU卡知識入門教程——第六章 對CPU卡中文件的操作
我們有什么辦法可以對文件操作呢?
?
比如我們要對個人基本信息文件pm.txt進行操作,在DOS下我們可以用EDIT pm.txt進行編輯,
?
在WINDOWS下我們可以雙擊pm.txt,用文本編輯器打開文件。
?
但在CPU卡中,我們怎么對一個文件(比如說EF1)進行操作呢?
?
比如說我們要打一個人,我們必須先找到那個將要倒霉被打的人。
?
同樣,我們要對一個文件操作,首先,我們必須先找到要操作的那個文件。
?
那我們怎們找到CPU卡中的文件呢?
?
我們查找某人,可以查找他(她)的身份證號來找到他,CPU中卡的每個文件是否也有
?
他們的身份證號呢?
?
有的:那就是文件標識,CPU卡中的文件通過文件標識表標記一個文件。
?
找一個人,還可以通過他(她)的名字來查找,找CPU卡中的文件呢?很遺憾,
?
對MF和DF有關目錄的文件有它們的文件名,其它文件則沒有文件名。
?
< 文件標識符與文件名稱>
?
文件標識符是文件的標識代碼,用2個字節(jié)表示,為什么只有2個字節(jié)呢?因為2個字節(jié)足矣,2個字節(jié)
?
FFFF=65535。
?
在選擇文件時只要找出該文件的標識,就可以找到該文件。同一目錄下的文件標識符是唯一的。
?
MF的文件標識符為3F00,文件名自定義,符合銀行規(guī)范名稱應該是1PAY.SYS.DDF01,
?
當然了,社保的卡規(guī)定的就不是這個名字了。
?
所有文件可以通過文件標識符用SELECT命令進行選擇,目錄文件DF可以通過目錄名稱進行選擇。
?
短文件標識符:
?
由于對CPU卡文件的操作要求節(jié)省空間并且方便操作。
?
于是好像便出現(xiàn)了短文件標識符這個東東。
?
所謂短文件標識符,在字面上的意思就是比文件標識符短。好像實際上也是這樣。
?
大家看看,短文件標識符只用1個字節(jié)來表示,并且只用1個字節(jié)低五位來表示。
?
同一個目錄下的文件短標識符必須是唯一的。
?
短文件標識符可以通過Read Binary、Update Binary命令的參數(shù)P1來實現(xiàn)文件的
?
選擇:若P1的高三位為100,則低5位為短文件標識符。例如:若P1為81H,即10000001,
?
其中高三位為100,則所選的文件標識符為00001,十六進制文件標識表示為00 01。
?
短文件標識符選擇還可以通過Read Record、Update Record命令參數(shù)P2來實現(xiàn)文件的選擇,
?
方法是若P2的高五位不全為0,低五位為100,則高五位為短文件標識符。對于命令
?
Append Record低五位為000來表短文件標識符。
?
短文件標識符選擇只能用五位來決定文件標識符,所以可選擇的最大文件標識為31,
?
若文件需要短文件標識符進行選擇,則建立文件時就需將文件標識符取在1-31之間。
?
< 文件的訪問>
?
上一節(jié)中規(guī)定了那么多種文件,那么,究竟該怎么對那些文件進行訪問呢?
?
MF:
?
在CPU卡被復位后自動被選擇,在任何一級子目錄下可通過文件標識3F00或其文件名來選擇MF
?
DF
?
通過文件名或文件標識符來選擇DF,在MF下可以選擇任意DF。
?
如果當前文件是一個DF下的一個EF,同樣可以通過選擇DF的文件標識符或文件名來選擇任意DF。
?
二進制文件:
?
在滿足讀條件時可使用Read Binary讀取,在滿足寫條件時可用Update Binary來更改二進制文
?
件的內容。
?
定長記錄文件:
?
在滿足讀條件時可使用Read Record讀取,在滿足寫條件時,若記錄未滿則用Append Record增加
?
新記錄,若記錄已滿則用Update Record來更改指定記錄的內容。
?
循環(huán)定長記錄文件:
?
在滿足讀條件時可使用Read Record讀取,在滿足追加條件時可使用Append Record在文件末尾追加
?
一個記錄,當記錄寫滿后自動覆蓋最早寫的記錄,最后一次寫入的記錄,其記錄號總是1,上次寫入
?
的記錄號是2,依次類推。
?
變長記錄文件
?
在滿足讀條件時可使用Read Record讀出記錄,在滿足寫條件時若記錄未滿則用Append Record增加
?
新記錄,若記錄已滿則用Update Record來更改指定記錄的內容。變長記錄文件的格式為TLV格式,
?
Tag為1字節(jié)的記錄標識,L為1字節(jié)的記錄數(shù)據(jù)長度,V為L字節(jié)的數(shù)據(jù)值。在執(zhí)行Update Record更改
?
已存在的記錄時,新寫的整條記錄長度必須和原來的整個記錄長度相等,否則將返回錯誤。