File Identifier Descriptor format
RBP | 大きさ | 型 | 名称 | 内容 |
0〜15 | 16 | struct tag | Descriptor Tag | TagID=257 |
16〜17 | 2 | unsigned short | File Version Number | =1 ファイルバージョン |
18 | 1 | unsigned char | File Characteristics | ファイル特性 |
19 | 1 | unsigned char | Length of File Identifier (=L_FI) | ファイル識別子の長さ [bytes] |
20〜35 | 16 | struct long_ad | ICB | そのファイル/ディレクトリの ICB (ファイルエントリ) の場所 |
36〜37 | 2 | unsigned short | Length of Implementation Use (=L_IU) | (=0) Implementation Use の長さ [bytes] |
38〜38+L_IU-1 | L_IU | unsigned char[L_IU] | Implementation Use | 下記参照 |
38+L_IU〜38+L_IU+L_FI-1 | L_FI | char[L_FI] | File Identifier | ファイル名 (d-characters) |
38+L_IU+L_FI〜 | 0〜3 | unsigned char[0〜3] | Padding | =0 FIDの大きさを4の倍数にするため |
File Version Number は 1〜32767 です。32768 〜 65535 は予約です。 UDF 1.02 では 1 です。
File Characteristics は次のとおりです。
File characteristics
bit | 内容 | 詳細 |
0 | 存在 | 0=公開ファイル 1=隠しファイル |
1 | ディレクトリ | 0=ファイル 1=ディレクトリ |
2 | 削除 | 0=ファイルは存在する 1=ファイルは削除された |
3 | 親 | 0=このディレクトリが持つファイルかディレクトリ 1=このディレクトリの親ディレクトリ |
4 | Metadata | 0=ストリームにないか、ストリームにあってユーザーデータを持つ 1=ストリームは implementation use データを持つ |
5〜7 | 予約 | 予約 |
削除ビットが 1 なら、ICB は全て 0 です。
Length of Implementation Use が 0 で、Implementation Use を記録しない場合が多いです。
UDF1.02 で 0 以外の場合は、32 と置いて、Implementation Use に reg_id を入れ、 ファイルを最後に変更した "*開発者名" を書きます。
親ディレクトリの場合、Length of File Identifier (=L_FI) は 0、 File Identifier は記録せず、Padding の長さは 2 です。
UDF1.02 では、ファイル名は最大 255 バイトです。
ファイル名には、OS 毎に異なる制限がありますが、 UDF の仕様書にあるサンプルソースコードを使って変換するのが楽です。
いつも大変に参考にさせていただいております
ありがとうございますm(__)m
えと、親ディレクトリのPadding長は2ではないかと思います
TagのCRClenも24になっているようですし
まぁ、どうせ0x00なんだし、実質的には全く問題ありませんので
どうでもいいっちゃ、どうでもいいんですが(^^ヾ