Class CriFsBinder
CriFsBinderオブジェクト
Implements
Inherited Members
Namespace: CriWare
Assembly: CriWare.CriFs.dll
Syntax
public class CriFsBinder : IDisposable
Remarks
説明: バインダーとは、ファイルを効率良く扱うためのデータベースです。 - CriFsBinder (バインダーオブジェクト)とバインド バインダーを利用するには、バインダーオブジェクト( CriFsBinder )を作成し、 CPKファイル/ファイル/ディレクトリをバインダーに結びつけます。 このバインダーへの結び付けをバインドと呼びます。 バインダーを作成すると、バインダーオブジェクト( CriFsBinder )が取得されます。 - CriFsBind (バインドID) バインダーにバインドを行うと、バインドIDが作成されます。個々のバインドを識別するために使用します。 - ファイルのバインドとアンバインド バインダーには、CPKファイルやファイル、ディレクトリをどのような組み合わせででもバインドできます。 バインドした項目のバインド状態を解除することをアンバインドと呼びます。 - 利用できるバインド数 作成できるバインダー数や同時にバインドできる最大数は、 CriFs.Config の num_binders (バインダー数)や max_binds (同時バインド可能な最大数)で指定します。 - CPKファイルのバインド CPKファイルに収納されている個々のファイル(コンテンツファイル)にアクセスするには、 CPKファイルをバインドする必要があります。 CPKファイルのコンテンツファイルもバインドできます。元のCPKファイルをアンバインドした場合、 バインドされているコンテンツファイルもアンバインドされます(暗黙的アンバインド)。 - バインダーのプライオリティ バインダーは、目的のファイルがどのバインドIDにあるのかを検索します。 このバインドIDの検索順は、基本的にはバインドされた順番になりますが、バインドIDのプライオリティを 操作することで、検索順を変更することができます。 - バインダーとCriFsのAPI CriFsLoader, CriFsGroupLoader, CriFsBinderには、バインダーを引数に持つAPIがあります。 その際には、 CriFsBinder と CriFsBind 、どちらを指定するのかに注意してください。
Constructors
CriFsBinder()
バインダーの生成
Declaration
public CriFsBinder()
Remarks
説明: バインダーを生成し、バインダーオブジェクトを返します。
Fields
BidNull
無効なバインドID
Declaration
public const int BidNull = 0
Field Value
Type | Description |
---|---|
int |
Remarks
説明: 未使用バインダーに与えられるIDです。バインドに失敗した時にも返ってくることがあります。
See Also
Properties
NativeHandle
ネイティブハンドル
Declaration
public NativeHandleIntPtr NativeHandle { get; }
Property Value
Type | Description |
---|---|
NativeHandleIntPtr |
Methods
AnalyzeWorkSizeForBindCpk(ArgString, out int, IntPtr, int)
CPKバインドに必要なワーク領域サイズの取得
Declaration
public CriErr.Error AnalyzeWorkSizeForBindCpk(ArgString path, out int rqsize, IntPtr work = default, int wksize = 0)
Parameters
Type | Name | Description |
---|---|---|
ArgString | path | CPKファイルのパス |
int | rqsize | CPKバインドに必要なワーク領域のサイズ |
IntPtr | work | CPKヘッダー解析用のワーク領域 |
int | wksize | CPKヘッダー解析用のワーク領域のサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: srcbndrhn と path で指定されたCPKファイルを解析し、CPKバインドに必要なワーク領域の サイズを取得します。 本関数は完了復帰関数です。 本関数は、指定されたCPKファイルのヘッダー情報を読み込んで解析しています。そのため、 内部で読込待ちを行っています。 本関数に渡すワーク領域は、GetWorkSizeForBindCpk(ArgString, out int)関数で得られたサイズの ワーク領域を確保して渡してください。
BindCpk(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)
Cpkファイルのバインド
Declaration
public CriErr.Error BindCpk(CriFsBinder srcbndrhn, ArgString path, out CriFsBind bndrid, IntPtr work = default, int worksize = 0)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | srcbndrhn | バインドするCPKファイルにアクセスするためのバインダーオブジェクト |
ArgString | path | バインドする CPKファイルのパス名 |
CriFsBind | bndrid | バインドID |
IntPtr | work | バインド用(主にCPK解析)ワーク領域 |
int | worksize | ワーク領域のサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CPKファイルを利用するには、CPKファイルをバインドする必要があります。 本関数は、バインダー(bndrhn)にCPKファイル(path)をバインドし、バインドID(bndrid)を返します。 srcbndrhnには、CPKファイルを検索するためのバインダーを指定します。 これがnullの場合、デフォルトデバイスを使用します。 ワーク領域(work)のサイズは、GetWorkSizeForBindCpk(ArgString, out int)で取得できます。 ワーク領域は、バインドIDが破棄されるまで保持してください。 メモリ確保/解放コールバック関数が登録されている場合、ワーク領域にnull(ワークサイズは0)を設定すると、 必要なワーク領域をメモリ確保/解放コールバック関数を使用して動的に確保します。 バインドを開始できない場合、バインドIDは BidNull が返されます。 バインドIDに BidNull 以外が返された場合は内部リソースを確保していますので、 バインドの成功/失敗に関らず、不要になったバインドIDはアンバインドしてください。 バインドしたCPKファイルはオープン状態で保持されます。 そのため、バインダー内部でCriFsLoaderを作成しています。 本関数は即時復帰関数です。本関数から復帰した直後は、CPKのバインドはまだ完了しておらず、 CPKのコンテンツファイルへのアクセスは行えません。 バインド状態が完了( Complete )となった後に、CPKは利用可能となります。 バインド状態は GetStatus(CriFsBind, out Status) 関数で取得します。
BindDirectory(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)
ディレクトリパスのバインド
Declaration
public CriErr.Error BindDirectory(CriFsBinder srcbndrhn, ArgString path, out CriFsBind bndrid, IntPtr work = default, int worksize = 0)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | srcbndrhn | バインドしたディレクトリ名でファイルにアクセスする際のバインダー |
ArgString | path | バインドするディレクトリパス名 |
CriFsBind | bndrid | バインドID |
IntPtr | work | バインド用ワーク領域 |
int | worksize | ワーク領域のサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ディレクトリパス名をバインドします。 バインドするディレクトリ名は絶対パスで指定してください。 バインド時に指定されたディレクトリが存在するか否かはチェックしていません。 バインドされるのはディレクトリパスだけで、指定されたディレクトリ内のファイルを オープン状態にするものではありません。よってバインドに失敗しない限り、本関数から復帰時には バインドIDのバインド状態は完了( Complete )となります。 srcbndrhnには、本関数でバインドしたディレクトリを用いてファイルを検索する際に、 検索対象となるバインダーを指定します。 ワーク領域(work)のサイズは、GetWorkSizeForBindDirectory(ArgString, out int)で取得できます。 ワーク領域は、バインドIDが破棄されるまで保持して下さい。 メモリ確保/解放コールバック関数が登録されている場合、ワーク領域にnull(ワークサイズは0)を設定すると、 必要なワーク領域をメモリ確保/解放コールバック関数を使用して動的に確保します。 バインドを開始できない場合、バインドIDは BidNull が返されます。 バインドIDに BidNull 以外が返された場合は内部リソースを確保していますので、 バインドの成功/失敗に関らず、不要になったバインドIDはアンバインドしてください。
備考: 最大同時にバインド可能なディレクトリ数には制限があります。 具体的には、CriFs.Config の num_binders や max_binds の値が充分であっても、 現状は最大16個(PCのみ64個)までしかディレクトリをバインドすることができません。
注意: 本関数は開発支援用のデバッグ関数です。 本関数を使用した場合、以下の問題が発生する可能性があります。 - Load(CriFsBinder, ArgString, long, long, IntPtr, long)関数やGetFileSize(ArgString, out long)関数内で処理が長時間ブロックされる。 - バインドしたディレクトリ内のファイルにアクセスする際、音声やムービーのストリーム再生が途切れる。 マスターアップ時には本関数をアプリケーション中で使用しないようご注意ください。 (ディレクトリ内のデータをCPKファイル化してBindCpk(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)関数でバインドするか、またはディレクトリ内のファイルを全てBindFiles(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)関数でバインドしてください。)
BindFile(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)
ファイルのバインド
Declaration
public CriErr.Error BindFile(CriFsBinder srcbndrhn, ArgString path, out CriFsBind bndrid, IntPtr work = default, int worksize = 0)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | srcbndrhn | バインド対象のファイルを検索するためのバインダーオブジェクト |
ArgString | path | バインドするファイルのパス名 |
CriFsBind | bndrid | バインドID |
IntPtr | work | バインド用ワーク領域 |
int | worksize | ワーク領域のサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ファイルをバインドし、バインドIDを返します。 srcbndrhnのバインダーからpathで指定されたファイルを検索し、bndrhnにバインドします。 srcbndrhnがnullの場合、デフォルトデバイス上のファイルを検索します。 ワーク領域(work)のサイズは、GetWorkSizeForBindFile(ArgString, out int)で取得できます。 ワーク領域は、バインドIDが破棄されるまで保持して下さい。 メモリ確保/解放コールバック関数が登録されている場合、ワーク領域にnull(ワークサイズは0)を設定すると、 必要なワーク領域をメモリ確保/解放コールバック関数を使用して動的に確保します。 バインドを開始できない場合、バインドIDは BidNull が返されます。 バインドIDに BidNull 以外が返された場合は内部リソースを確保していますので、 バインドの成功/失敗に関らず、不要になったバインドIDはアンバインドしてください。 バインドされたファイルはファイルオープン状態で保持します。 このため、内部的にCriFsLoaderを作成しています。 本関数は即時復帰関数です。本関数から復帰した直後は、ファイルのバインドはまだ完了しておらず、 バインドIDを利用したファイルへのアクセスは行えません。 バインドIDのバインド状態が完了( Complete )となった後に、 ファイルは利用可能となります。 バインド状態は GetStatus(CriFsBind, out Status) 関数で取得します。
BindFileSection(CriFsBinder, ArgString, ulong, int, ArgString, out CriFsBind, IntPtr, int)
ファイルセクションのバインド
Declaration
public CriErr.Error BindFileSection(CriFsBinder srcbndrhn, ArgString path, ulong offset, int size, ArgString sectionName, out CriFsBind bndrid, IntPtr work = default, int worksize = 0)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | srcbndrhn | バインド対象のファイルを検索するためのバインダーオブジェクト |
ArgString | path | バインドするファイルのパス名 |
ulong | offset | データの開始位置(バイト) |
int | size | データサイズ(バイト) |
ArgString | sectionName | セクション名 |
CriFsBind | bndrid | バインドID |
IntPtr | work | バインド用ワーク領域 |
int | worksize | ワーク領域のサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ファイルの一部分をバインドし、その箇所を仮想的なファイルとして扱えるよう設定します。 srcbndrhnのバインダーからpathで指定されたファイルを検索してバインドします。 srcbndrhnがnullの場合、デフォルトデバイスを使用します。 ワーク領域(work)のサイズは、GetWorkSizeForBindFileSection(ArgString, ArgString, out int)で取得できます。 ワーク領域は、バインドIDが破棄されるまで保持して下さい。 メモリ確保/解放コールバック関数が登録されている場合、ワーク領域にnull(ワークサイズは0)を設定すると、 必要なワーク領域をメモリ確保/解放コールバック関数を使用して動的に確保します。 バインドを開始できない場合、バインドIDは BidNull が返されます。 バインドIDに BidNull 以外が返された場合は内部リソースを確保していますので、 バインドの成功/失敗に関らず、不要になったバインドIDはアンバインドしてください。 バインドされたファイルはファイルオープン状態で保持します。 このため、内部的にCriFsLoaderを作成しています。 本関数は即時復帰関数です。本関数から復帰した直後は、ファイルのバインドはまだ完了しておらず、 バインドIDを利用したファイルへのアクセスは行えません。 バインドIDのバインド状態が完了( Complete )となった後に、 ファイルは利用可能となります。 バインド状態は GetStatus(CriFsBind, out Status) 関数で取得します。
See Also
BindFiles(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)
複数ファイルのバインド
Declaration
public CriErr.Error BindFiles(CriFsBinder srcbndrhn, ArgString filelist, out CriFsBind bndrid, IntPtr work = default, int worksize = 0)
Parameters
Type | Name | Description |
---|---|---|
CriFsBinder | srcbndrhn | バインド対象のファイルを検索するためのバインダーオブジェクト |
ArgString | filelist | バインドするファイル名のリスト(セパレータ:',''''' ターミネイタ:'\0') |
CriFsBind | bndrid | バインドID |
IntPtr | work | バインド用ワーク領域 |
int | worksize | ワーク領域のサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ファイルリスト(filelist)に列記されたファイルをバインドします。 ファイルはsrcbndrhnから検索されますが、srcbndrhnがnullの場合、デフォルトデバイスが使用されます。 ワーク領域のサイズは、GetWorkSizeForBindFiles(ArgString, out int) で取得できます。 ワーク領域は、バインドIDが破棄されるまで保持して下さい。 メモリ確保/解放コールバック関数が登録されている場合、ワーク領域にnull(ワークサイズは0)を設定すると、 必要なワーク領域をメモリ確保/解放コールバック関数を使用して動的に確保します。 バインドを開始できない場合、バインドIDは BidNull が返されます。 バインドIDに BidNull 以外が返された場合は内部リソースを確保していますので、 バインドの成功/失敗に関らず、不要になったバインドIDはアンバインドしてください。 バインドしたファイルはファイルオープン状態で保持します。 内部的には CriFsLoader がバインドIDに1つ作成され、ファイルオブジェクトがバインドするファイル数分使用されます。 本関数は即時復帰関数です。本関数から復帰した直後は、ファイルのバインドはまだ完了しておらず、 バインダーを利用したファイルへのアクセスは行えません。 バインド状態が完了( Complete )となった後に、ファイルは利用可能となります。 バインド状態は GetStatus(CriFsBind, out Status) 関数で取得します。
CalculateWorkSizeForBindCpk(int, int, int, out int)
CPKバインドに必要なワーク領域サイズの取得
Declaration
public static CriErr.Error CalculateWorkSizeForBindCpk(int tocsize, int itocsize, int gtocsize, out int rqsize)
Parameters
Type | Name | Description |
---|---|---|
int | tocsize | CPKファイルのTOC情報のサイズ(CPK_TOC_INFO_SIZE) |
int | itocsize | CPKファイルのITOC情報のサイズ(CPK_ITOC_INFO_SIZE) |
int | gtocsize | CPKファイルのGTOC情報のサイズ(CPK_GTOC_INFO_SIZE) |
int | rqsize | CPKバインドに必要なワーク領域のサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CPKファイルバインドに必要なワーク領域のサイズを取得します。 本関数の引数は、CPKビルドの際に出力されるCPKヘッダーファイルのシンボル CPK_TOC_INFO_SIZE、CPK_ITOC_INFO_SIZE、CPK_GTOC_INFO_SIZE で定義されている数値を 指定します。 定義されていないシンボルは0を指定します。 例えば、IDのみCPKではCPK_TOC_INFO_SIZE、CPK_GTOC_INFO_SIZEが定義されていませんので、 tocsizeとgtosizeには0を指定します。
CleanImplicitUnbindList()
暗黙的アンバインドリストのクリア
Declaration
public static CriErr.Error CleanImplicitUnbindList()
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 暗黙的アンバインドリストに登録されている全てのバインドIDを未使用リストへ戻します。 暗黙的アンバインドされるのバインドIDは、次の様な場合です。 ・他のバインドIDに依存したファイルをバインドしている場合(CPKのコンテンツファイルなど)。 ・親バインドIDがアンバインドされた場合。
CloseFile(CriFsBind, out Status)
バインド中のファイルの一時クローズ
Declaration
public static CriErr.Error CloseFile(CriFsBind bindId, out CriFsLoader.Status internalLoaderStatus)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bindId | バインドID |
CriFsLoader.Status | internalLoaderStatus | 内部ローダーステータス |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: バインド中のファイルを一旦クローズします。 Unbind(CriFsBind) 関数と異なり、 CPKファイルのTOC情報をメモリ上に残したままファイルのみをクローズします。 (バインドIDに紐付けられているネイティブファイルのオブジェクトがクローズされます。)
備考: 本関数は、CPKファイルはバインドした状態にしておきたいが、 他のファイルをオープンするため、一時的にファイルオブジェクトを解放したい場合等に使用します。 ※ファイルオブジェクト等のハードウェアリソースがプラットフォームで利用可能な上限数に達しない限り、 本関数を使用する必要はありません。 本関数は同期APIです。 本関数を実行すると、ファイルのオープン完了まで処理がブロックされます。 オープン処理を非同期に行いたい場合には、本関数の代わりに CloseFileAsync(CriFsBind, out CriFsLoader) 関数をご使用ください。
注意: 本関数でクローズしたCPKファイルに対してアクセスすると、リードエラーが発生します。 本関数実行後、 ReopenFile(CriFsBind, out Status) 関数を実行するまでの間、 当該CPKファイルに対するアクセスが発生しないよう制御する必要があります。 本関数は、CPKファイルを直接バインドしているケースでのみ利用可能です。 ディレクトリバインドを使用しているケースや、ファイルバインドを使用しているケース、 CPKファイル内のコンテンツをバインドしているケースでは、本関数は使用できません。
See Also
CloseFileAsync(CriFsBind, out CriFsLoader)
バインド中のファイルの一時クローズ
Declaration
public static CriErr.Error CloseFileAsync(CriFsBind bindId, out CriFsLoader internalLoader)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bindId | バインドID |
CriFsLoader | internalLoader | 内部ローダーオブジェクト |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: バインド中のファイルを一旦クローズします。 処理が非同期な点を除き、 CloseFile(CriFsBind, out Status) 関数と同様の操作を行います。
備考: 本関数は非同期処理用のAPIです。 本関数を実行すると、ファイルのクローズ完了を待つことなく処理が復帰します。 ファイルのクローズが完了したかどうかは、第 2 引数( internal_loader ) で返されるローダーオブジェクトを使用してチェックします。 (クローズ処理が完了したタイミングで、ローダーオブジェクトのステータスが Complete に遷移します。)
注意: 第 2 引数( internal_loader )で返されるローダーオブジェクトは、 ライブラリ内でファイルアクセスのために使用される内部リソースです。 このオブジェクトをアプリケーション中で破棄しないでください。
See Also
CompleteAsyncFileReopen(CriFsBind)
一時クローズファイルの再オープン反映
Declaration
public static CriErr.Error CompleteAsyncFileReopen(CriFsBind bindId)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bindId | バインドID |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ReopenFileAsync(CriFsBind, out CriFsLoader) 関数によるファイルの再オープン情報を、 バインドIDに反映させ、再オープン処理を完了します。 ReopenFileAsync(CriFsBind, out CriFsLoader) 関数の実行で取得したローダーオブジェクトのステータスが Complete に遷移した事を確認してから実行してください。 ファイルを再オープンしたバインドIDに対して、 本関数を実行せずにロードを実行すると、ロードに失敗します。
ReopenFile(CriFsBind, out Status) 関数に対しては本関数を実行する必要はありません。
注意: ファイル再オープン用ローダーオブジェクトのステータスが Complete 以外の状態で本関数を実行すると、 本関数はエラーを返します。
Dispose()
バインダーの破棄
Declaration
public void Dispose()
Remarks
説明: バインダーを破棄します。
注意: 破棄するバインダーにバインドされているバインドIDも同時に破棄されます。 本関数で破棄できるのは、CriFsBinder() 関数により生成されたバインダーオブジェクトのみです。 GetHandle(CriFsBind, out CriFsBinder) 関数により CriFsBind から取得されたバインダーオブジェクトは破棄できません。 CriFsBind については Unbind(CriFsBind) 関数をご使用ください。 *
Find(ArgString, out FileInfo, out NativeBool)
ファイル情報の取得(ファイル名指定)
Declaration
public CriErr.Error Find(ArgString filepath, out CriFsBinder.FileInfo finfo, out NativeBool exist)
Parameters
Type | Name | Description |
---|---|---|
ArgString | filepath | ファイルのフルパス |
CriFsBinder.FileInfo | finfo | ファイル情報構造体 |
NativeBool | exist | ファイル検索結果(true:取得成功 false:取得失敗) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定されたファイルをバインダーから検索し、その情報を返します。 バインド状態が Complete であるバインドIDのみを検索対象とします。 ファイルが見付かった場合は existにtrueを、ファイル情報構造体(finfo)にファイル情報をセットします。 ファイルが見付からない場合、existにfalseをセットします。 finfoがnullの場合、existにファイルの検索結果のみをセットします。
FindById(int, out FileInfo, out NativeBool)
ファイル情報の取得(ID指定)
Declaration
public CriErr.Error FindById(int id, out CriFsBinder.FileInfo finfo, out NativeBool exist)
Parameters
Type | Name | Description |
---|---|---|
int | id | CPKコンテンツファイルID |
CriFsBinder.FileInfo | finfo | ファイル情報構造体 |
NativeBool | exist | ファイル検索結果(true:取得成功 false:取得失敗) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: バインダーオブジェクトから、指定されたIDのファイルを検索し、その情報を返します。 ID情報つきCPKファイルをバインドしている必要があります。 バインド状態が Complete であるバインドIDのみを検索対象とします。 ファイルが見付かった場合は existにtrueをセットし、ファイル情報構造体(finfo)にファイル情報をセットします。 ファイルが見付からない場合、existにfalseをセットします。 finfoがnullの場合、existにファイルの検索結果(true/false)のみをセットします。
GetBinderIdInfo(CriFsBind, out Info)
バインドID情報の取得
Declaration
public static CriErr.Error GetBinderIdInfo(CriFsBind bndrid, out CriFsBinder.Info binf)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
CriFsBinder.Info | binf | 取得情報 |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定されたバインドIDのバインダー種別(CPK/ファイル/ディレクトリ等)やバインドしたファイル名、プライオリティ設定などの 情報を取得します。
GetContentsFileInfo(ArgString, out ContentsFileInfo)
CPKコンテンツファイル情報の取得
Declaration
public CriErr.Error GetContentsFileInfo(ArgString path, out CriFsBinder.ContentsFileInfo cfinf)
Parameters
Type | Name | Description |
---|---|---|
ArgString | path | コンテンツファイルパス名 |
CriFsBinder.ContentsFileInfo | cfinf | CriFsBinder.ContentsFileInfo構造体へのポインター |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ファイル名情報付きCPKファイルから、指定されたコンテンツファイル名のファイル情報を取得します。 指定されたコンテンツファイルを格納しているCPKが、ファイル名情報付CPKである必要があります。 指定したバインダーオブジェクトに、同じ名前のファイルが複数存在する場合、最初に見付けたファイルを 格納しているCPKが選択されます。 特定のCPKファイルを直接指定したい場合、GetHandle(CriFsBind, out CriFsBinder)関数により、そのCPKのバインダーIDから バインダーオブジェクトを取得し、本関数の引数としてください。
注意: 本機能を使用するには、『CPK File Builder Ver.1.03以降』を使用して作成した、ファイル名情報付CPKを 用いる必要があります。
GetContentsFileInfoById(int, out ContentsFileInfo)
CPKコンテンツファイル情報の取得
Declaration
public CriErr.Error GetContentsFileInfoById(int id, out CriFsBinder.ContentsFileInfo cfinf)
Parameters
Type | Name | Description |
---|---|---|
int | id | ファイルID |
CriFsBinder.ContentsFileInfo | cfinf | CriFsBinder.ContentsFileInfo構造体へのポインター |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ID+ファイル名情報付きCPKファイルから、指定されたファイルIDのファイル情報を取得します。 指定されたファイルを格納しているCPKが、ID+ファイル名情報付CPKである必要があります。 指定したバインダーオブジェクトに、同じIDのファイルが複数存在する場合、最初に見付けたファイルを 格納しているCPKが選択されます。 特定のCPKファイルを直接指定したい場合、GetHandle(CriFsBind, out CriFsBinder)関数により、そのCPKのバインドIDから バインダーオブジェクトを取得し、本関数の引数としてください。
注意: 本機能を使用するには、『CPK File Builder Ver.1.03以降』を使用して作成した、ID+ファイル名情報付CPKを 用いる必要があります。
GetContentsFileInfoByIndex(CriFsBind, int, out ContentsFileInfo, int)
Index指定によるCPKコンテンツファイル情報の取得
Declaration
public static CriErr.Error GetContentsFileInfoByIndex(CriFsBind bndrid, int index, out CriFsBinder.ContentsFileInfo cfinf, int n)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
int | index | 情報を取得するコンテンツファイルの先頭INDEX |
CriFsBinder.ContentsFileInfo | cfinf | |
int | n | 情報を取得するコンテンツファイルの数 |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CPKファイルのコンテンツファイル、indexからn個分のファイル情報を取得します。 indexはCPK作成時、コンテンツファイルに対して0から割付られます。 index, nの上限値はGetBinderIdInfo(CriFsBind, out Info)関数で取得されるファイル数となります。 IDのみのモードで作成されたCPKは、「ディレクトリ名」、「ファイル名」、「ユーザー文字列」の情報を持たないため、 CriFsBinder.ContentsFileInfo構造体配列の該当メンバには null が格納されます。
備考: 情報取得に失敗した場合であっても、本関数はエラー値を返さない場合があります。 ただし、その場合であっても、コンテンツファイル情報のファイル名がnullでかつ、IDが-1になっている事から、 情報取得に失敗した事を判定可能です。
GetContentsFileUserString(ArgString, ArgString, int)
CPKコンテンツファイル情報に含まれるユーザー文字列の取得
Declaration
public CriErr.Error GetContentsFileUserString(ArgString path, ArgString ustr, int length)
Parameters
Type | Name | Description |
---|---|---|
ArgString | path | コンテンツファイルパス名 |
ArgString | ustr | ユーザー文字列格納領域 |
int | length | ユーザー文字列格納領域サイズ(単位はバイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ファイル名情報付きCPKファイルから、指定されたコンテンツファイル名のファイル情報に含まれるユーザー文字列を取得します。 指定されたコンテンツファイルを格納しているCPKが、ファイル名情報付CPKである必要があり、 なおかつファイル情報にユーザー文字列が付与されている必要があります。 ユーザー文字列を付与するためには、CPK File Builder (GUI ツール) ならば「ファイル情報にアトリビュート文字列を埋め込む」を有効に、 CRI Packed File Makerコンソール版ならば「-attrstring」オプションを指定してCPKを作成してください。 詳細な作成方法はツールのマニュアルを参照してください。 CPKが上記の設定で作成されていない場合、本関数は失敗し、エラーを返します。 この場合、ustr には null が格納されます。 CPKは上記の設定で作成されたが、アトリビュートが指定されていないコンテンツファイルが本関数に指定された場合、 エラーは発生せずに ustr には "\0" が格納されます。 指定したバインダーオブジェクトに、同じ名前のファイルが複数存在する場合、最初に見付けたファイルを 格納しているCPKが選択されます。 特定のCPKファイルを直接指定したい場合、GetHandle(CriFsBind, out CriFsBinder)関数により、そのCPKのバインダーIDから バインダーオブジェクトを取得し、本関数の引数としてください。
注意: 本機能を使用するには、『CPK File Builder Ver.1.03以降』を使用して作成した、ファイル名情報付CPKを 用いる必要があります。
注意: ユーザー文字列の長さの制約は CRI File System ライブラリでは設けておりません。 ユーザー側でユーザー文字列の最大長を規定し、十分な格納領域を確保してください。 CPKツールのアトリビュート文字列を埋め込む機能でユーザー文字列を指定した場合、 "CRI_CFATTR:" という接頭辞が付与されますので、その分のサイズも考慮する必要があります。 ユーザー文字列の終端まで収まらないほど格納領域サイズが小さい場合は、格納領域の末尾を終端文字に置換し、警告を返します。
GetContentsFileUserStringById(int, ArgString, int)
CPKコンテンツファイル情報に含まれるユーザー文字列の取得 (ID指定)
Declaration
public CriErr.Error GetContentsFileUserStringById(int id, ArgString ustr, int length)
Parameters
Type | Name | Description |
---|---|---|
int | id | ファイルID |
ArgString | ustr | ユーザー文字列格納領域 |
int | length | ユーザー文字列格納領域サイズ(単位はバイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ID+ファイル名情報付きCPKファイルから、指定されたファイルIDのファイル情報に含まれるユーザー文字列を取得します。 指定されたファイルを格納しているCPKが、ID+ファイル名情報付CPKである必要があり、 なおかつファイル情報のユーザー文字列が付与されている必要があります。 ユーザー文字列を付与するためには、CPK File Builder (GUI ツール) ならば「ファイル情報にアトリビュート文字列を埋め込む」を有効に、 CRI Packed File Makerコンソール版ならば「-attrstring」オプションを指定してCPKを作成してください。 詳細な作成方法はツールのマニュアルを参照してください。 CPKが上記の設定で作成されていない場合、本関数は失敗し、エラーを返します。 この場合、ustr には null が格納されます。 CPKは上記の設定で作成されたが、アトリビュートが指定されていないコンテンツファイルが本関数に指定された場合、 エラーは発生せずに ustr には "\0" が格納されます。 指定したバインダーオブジェクトに、同じIDのファイルが複数存在する場合、最初に見付けたファイルを 格納しているCPKが選択されます。 特定のCPKファイルを直接指定したい場合、GetHandle(CriFsBind, out CriFsBinder)関数により、そのCPKのバインドIDから バインダーオブジェクトを取得し、本関数の引数としてください。
注意: 本機能を使用するには、『CPK File Builder Ver.1.03以降』を使用して作成した、ID+ファイル名情報付CPKを 用いる必要があります。
注意: ユーザー文字列の長さの制約は CRI File System ライブラリでは設けておりません。 ユーザー側でユーザー文字列の最大長を規定し、十分な格納領域を確保してください。 CPKツールのアトリビュート文字列を埋め込む機能でユーザー文字列を指定した場合、 "CRI_CFATTR:" という接頭辞が付与されますので、その分のサイズも考慮する必要があります。 ユーザー文字列の終端まで収まらないほど格納領域サイズが小さい場合は、格納領域の末尾を終端文字に置換し、警告を返します。
GetFileSize(ArgString, out long)
ファイルサイズの取得(ファイル名指定)
Declaration
public CriErr.Error GetFileSize(ArgString filepath, out long size)
Parameters
Type | Name | Description |
---|---|---|
ArgString | filepath | ファイルのフルパス |
long | size | ファイルのサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定されたファイルのファイルサイズを取得します。 まず、bndrhn のバインダーから目的のファイルを検索します。 bndrhn に目的のファイルが存在しない場合、デフォルトデバイスのfilepathのファイルを探します。 このとき、ファイルをオープン待ちが入る場合があります。 バインド状態が Complete であるバインドIDが検索対象とします。 指定されたファイルが存在しない場合、sizeには負値が設定されます。
備考: 本関数は、内部的に Find(ArgString, out FileInfo, out NativeBool) 関数を実行し、 ファイルがバインダーに登録されていなければファイルI/Oにアクセスしてファイルの有無を調べる、 という実装になっています。 (バインダーに登録されていないファイルや、存在しないファイルに対して本関数を実行した場合、 ファイルI/Oへのアクセスが発生し、長時間処理がブロックされる可能性があります。) ファイルがバインダーに登録されているかどうかをチェックしたい場合には、 本関数の代わりに、 Find(ArgString, out FileInfo, out NativeBool) 関数をご利用ください。
注意: 以下のケースでは、本関数内で長時間処理がブロックされる場合があります。 - バインダーオブジェクトにnullを指定した場合 - バインダーに登録されていないファイルを指定した場合 - 無効なパス(存在しないファイル)を指定した場合 - BindDirectory(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)関数でディレクトリをバインドしたオブジェクトを指定した場合
See Also
GetFileSizeById(int, out long)
ファイルサイズの取得(ID指定)
Declaration
public CriErr.Error GetFileSizeById(int id, out long size)
Parameters
Type | Name | Description |
---|---|---|
int | id | ファイルのID |
long | size | ファイルのサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ファイルサイズを取得します。 ID情報つきCPKファイルがバインドされている必要があります。 bndrhn のバインダーから目的のファイルを検索します。 バインド状態が Complete であるCPKバインドIDのみを検索対象とします。
See Also
GetHandle(CriFsBind, out CriFsBinder)
CriFsBinderの取得
Declaration
public static CriErr.Error GetHandle(CriFsBind bndrid, out CriFsBinder bndrhn)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
CriFsBinder | bndrhn | バインダーオブジェクト |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CriFsBindをCriFsBinderに変換します。 新たにCriFsBinderを生成するものではなく、型変換を行うものと考えてください。 よって、実体としては同じものを指しており、本関数でCriFsBinderのリソースを消費することはありません。 元のCriFsBindもそのまま CriFsBind として使用できます。 バインドされたファイルの情報を得る場合、バインドされたバインドIDが順に検索されます。 このため、特定のバインドIDにあるファイルにアクセスしたい場合、目的のバインドIDから バインダーオブジェクトを取得して使用することで、効率的な検索を行うことが可能になります。
注意: 本関数により取得された CriFsBinder は Dispose() 関数では破棄できません。 元となる CriFsBind を Unbind(CriFsBind) 関数でアンバインドしてください。
See Also
GetNumberOfGroupFiles(CriFsBind, ArgString, ArgString, out int)
グループファイル数の取得
Declaration
public static CriErr.Error GetNumberOfGroupFiles(CriFsBind bndrid, ArgString groupname, ArgString attrname, out int groupfiles)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
ArgString | groupname | グループ名 |
ArgString | attrname | アトリビュート名 |
int | groupfiles | グループファイル数 |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定したバインドID、グループ名、アトリビュート名に適合するファイルの数を取得します。 適合するファイルが存在しない場合、ファイル数は0になります。 グループ情報付きのCPKファイルをバインドしたバインドIDを指定する必要があります。 無効なバインドIDを指定した場合、エラーコールバックが起きます。 アトリビュート名にnullを指定した場合、指定グループに属する全てのファイルがグループロードの対象となります。 また、パッキングツールのアトリビュート指定を「none」とした場合も、アトリビュート名にnullを指定してください。
GetPriority(CriFsBind, out int)
プライオリティ値の取得
Declaration
public static CriErr.Error GetPriority(CriFsBind bndrid, out int priority)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
int | priority | プライオリティ値 |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: バインドIDのプライオリティ値を取得します。 プライオリティにより、バインダーオブジェクト内における、バインドIDの検索順を制御できます。 バインド時のプライオリティ値は0です。 同プライオリティ内の検索順は、後に SetPriority(CriFsBind, int) が指定された順番になります。 SetPriority(CriFsBind, int) が呼び出されていない場合、先にバインドされた順番になります。 プライオリティ値の大きい方が高プライオリティとなり、検索順が高くなります。
GetStatus(CriFsBind, out Status)
バインド状態の取得
Declaration
public static CriErr.Error GetStatus(CriFsBind bndrid, out CriFsBinder.Status status)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
CriFsBinder.Status | status | CriFsBinder.Statusバインダーステータス |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定されたバインドIDのバインド状態を取得します。 バインド状態が Complete になるまでは、 そのバインドIDによるファイルアクセスを行えません。
GetTotalGroupDataSize(CriFsBind, ArgString, ArgString, out long)
グループロードサイズの取得
Declaration
public static CriErr.Error GetTotalGroupDataSize(CriFsBind bndrid, ArgString groupname, ArgString attrname, out long datasize)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
ArgString | groupname | グループ名 |
ArgString | attrname | アトリビュート名 |
long | datasize | グループロードサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: 指定したバインドID、グループ名、アトリビュート名に適合するグループのロードに必要な読込領域のサイズを取得します。 アライメントなども加味されたデータサイズとなります。 適合するファイルが存在しない場合、グループロードサイズは0になります。 グループ情報付きのCPKファイルをバインドしたバインドIDを指定する必要があります。 無効なバインドIDを指定した場合、エラーコールバックが起きます。 アトリビュート名にnullを指定した場合、指定グループに属する全てのファイルがグループロードの対象となります。 また、パッキングツールのアトリビュート指定を「none」とした場合も、アトリビュート名にnullを指定してください。
GetWorkSizeForBindCpk(ArgString, out int)
CPKファイルバインドのワークサイズ取得
Declaration
public CriErr.Error GetWorkSizeForBindCpk(ArgString path, out int worksize)
Parameters
Type | Name | Description |
---|---|---|
ArgString | path | バインドするCPKファイルのパス名 |
int | worksize | 必要ワークサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: BindCpk(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)関数に指定するワークサイズを取得します。 本関数では、CPKの情報を解析するために最低限必要とされるワークサイズを取得できます。 コンテンツファイル数の少いCPKファイルであれば、本関数で得られる数値のままでもCPKをバインドできる可能性があります。 CPKバインド中にワークメモリが不足した場合、エラーコールバック関数で不足分の容量が示されます。 *** CPKバインドに必要なワークサイズの取得するには、以下の方法があります。 *** 1. エラーコールバックを利用する。 CPKバインド中にワークメモリが不足した場合、エラーコールバック関数により不足分のサイズが示されます。 現在確保しているワーク領域のサイズに、エラーコールバックで得られるサイズを加算してワーク領域を再確保し、CPKバインドをやりなおします。 CPKバインドをやりなおす場合、メモリ不足エラーコールバックを起こしたバインダーIDをアンバインドする必要があります。 2. メモリ確保/解放コールバック関数( SetUserHeapFunc(delegate* unmanaged[Cdecl]<IntPtr, uint, IntPtr>, delegate* unmanaged[Cdecl]<IntPtr, IntPtr, void>, IntPtr) )を利用する。 CPKバインド時にワークメモリの確保/解放が必要な際に呼出されるコールバック関数を登録します。 バインド時に適時メモリ確保コールバック関数が呼出された場合、要求されたメモリを確保してエラーコールバック関数の返値として返します。 3. 必要ワークサイズ取得API( AnalyzeWorkSizeForBindCpk(ArgString, out int, IntPtr, int) )を利用する。 バインドするCPKから情報を取得し、必要となるワークサイズを算出する関数を利用します。 この関数は完了復帰関数で、関数内部でCPKファイルから情報を読み出しています。そのため関数終了までに時間がかかります。 4. CPKパッキングツールを利用する。 パッキングツールにCPKファイルをドラッグ&ドロップし、CPKファイルビューア[詳細]テキストボックスの 「Enable Filename info.」「Enable ID info.」[Enable Group info.]項目に表示されるバイト数を、 本関数で取得される必要ワークサイズに加算します。 ただし、この方法で得られるワークサイズは目安ですので、メモリ不足エラーコールバックが起きる可能性があります。
GetWorkSizeForBindDirectory(ArgString, out int)
ディレクトリバインドのワークサイズの取得
Declaration
public CriErr.Error GetWorkSizeForBindDirectory(ArgString path, out int worksize)
Parameters
Type | Name | Description |
---|---|---|
ArgString | path | バインドするディレクトリのパス名 |
int | worksize | 必要ワークサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: BindDirectory(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)関数に指定するワークサイズを取得します。
GetWorkSizeForBindFile(ArgString, out int)
ファイルバインドのワークサイズの取得
Declaration
public CriErr.Error GetWorkSizeForBindFile(ArgString path, out int worksize)
Parameters
Type | Name | Description |
---|---|---|
ArgString | path | バインドするファイルのパス名 |
int | worksize | 必要ワークサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: BindFile(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)関数に指定するワークサイズを取得します。
GetWorkSizeForBindFileSection(ArgString, ArgString, out int)
ファイルセクションバインドのワークサイズの取得
Declaration
public CriErr.Error GetWorkSizeForBindFileSection(ArgString path, ArgString sectionName, out int worksize)
Parameters
Type | Name | Description |
---|---|---|
ArgString | path | バインドするファイルのパス名 |
ArgString | sectionName | セクション名 |
int | worksize | 必要ワークサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: BindFileSection(CriFsBinder, ArgString, ulong, int, ArgString, out CriFsBind, IntPtr, int)関数に指定するワークサイズを取得します。
GetWorkSizeForBindFiles(ArgString, out int)
複数ファイルバインドのワークサイズの取得
Declaration
public CriErr.Error GetWorkSizeForBindFiles(ArgString filelist, out int worksize)
Parameters
Type | Name | Description |
---|---|---|
ArgString | filelist | バインドするファイル名のリスト(セパレータ:',''''' ターミネイタ:'\0') |
int | worksize | 必要ワークサイズ(バイト) |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: BindFiles(CriFsBinder, ArgString, out CriFsBind, IntPtr, int)関数に指定するワークサイズを取得します。
GetWorkSizeForCpkIdAccessTable(CriFsBind, int, out int)
ID情報付CPKのアクセス情報テーブル作成用ワークサイズ取得
Declaration
public static CriErr.Error GetWorkSizeForCpkIdAccessTable(CriFsBind bindrid, int steps, out int worksize)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bindrid | バインドID |
int | steps | アクセス情報テーブル作成の作成間隔 |
int | worksize | アクセス情報テーブル作成用ワーク領域のサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ID情報付CPKのアクセス情報テーブルの作成に必要なワーク領域のサイズを取得します。 アクセス情報テーブルとは、CPKのコンテンツファイルにアクセスする際の処理を前もって行うことで、 アクセス速度を向上させるためのものです。 ID情報のないCPKではアクセステーブルは必要ありません。 本関数はID情報付CPKに対してのみ有効です。 本関数は完了復帰関数です。 アクセス情報テーブルの領域は、該当CPKがバインドされている間は解放したり、他へ転用しないでください。
アクセス情報テーブルの作成間隔について stepsに1を指定した場合、全てのコンテンツファイルに対するアクセス情報テーブルが作成されます。 この場合、アクセス情報テーブルの要素数はコンテンツファイル数と同じになります。 stepsに1より大きい値を指定した場合は、指定stepsおきのコンテンツファイルに対するアクセス情報テーブルが作成されます。 アクセス情報テーブルの要素数はstepsに応じて変化します。 全てのコンテンツファイルに対するテーブルを準備しないので、stepsに1を設定したときに比べて、 ファイルアクセス時の処理がかかりますが、アクセス情報テーブルの領域を小さくできます。
ReopenFile(CriFsBind, out Status)
一時クローズファイルの再オープン
Declaration
public static CriErr.Error ReopenFile(CriFsBind bindId, out CriFsLoader.Status internalLoaderStatus)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bindId | バインドID |
CriFsLoader.Status | internalLoaderStatus | 内部ローダーステータス |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CloseFile(CriFsBind, out Status) 関数等でクローズしたファイルを再度オープンし直します。
備考: 本関数は同期APIです。 本関数を実行すると、ファイルのオープン完了まで処理がブロックされます。 オープン処理を非同期に行いたい場合には、本関数の代わりに ReopenFileAsync(CriFsBind, out CriFsLoader) 関数をご使用ください。
注意: リードエラー等によりファイルの再オープンに失敗した場合、 第 2 引数( internal_loader_status )が Error になります。
See Also
ReopenFileAsync(CriFsBind, out CriFsLoader)
一時クローズファイルの再オープン
Declaration
public static CriErr.Error ReopenFileAsync(CriFsBind bindId, out CriFsLoader internalLoader)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bindId | バインドID |
CriFsLoader | internalLoader | 内部ローダーオブジェクト |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CloseFile(CriFsBind, out Status) 関数等でクローズしたファイルを再度オープンし直します。 処理が非同期な点を除き、 ReopenFile(CriFsBind, out Status) 関数と同様の操作を行います。
備考: 本関数は非同期処理用のAPIです。 本関数を実行すると、ファイルのオープン完了を待つことなく処理が復帰します。 ファイルのオープンが完了したかどうかは、第 2 引数( internal_loader ) で返されるローダーオブジェクトを使用してチェックします。 (オープン処理が完了したタイミングで、ローダーオブジェクトのステータスが Complete に遷移します。) ファイルオープンの完了を確認した後、CompleteAsyncFileReopen(CriFsBind) 関数を使い、 バインドIDに対してファイルの再オープンを完了してください。
注意: 第 2 引数( internal_loader )で返されるローダーオブジェクトは、 ライブラリ内でファイルアクセスのために使用される内部リソースです。 このオブジェクトをアプリケーション中で破棄しないでください。 リードエラー等によりファイルの再オープンに失敗した場合、 第 2 引数( internal_loader_status )で返されたローダーオブジェクトのステータスが Error になります。
See Also
SetCurrentDirectory(CriFsBind, ArgString, IntPtr, int)
カレントディレクトリの設定
Declaration
public static CriErr.Error SetCurrentDirectory(CriFsBind bndrId, ArgString path, IntPtr work = default, int worksize = 0)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrId | バインドID |
ArgString | path | カレントディレクトリ |
IntPtr | work | カレントディレクトリ名保存用ワーク領域 |
int | worksize | カレントディレクトリ名保存用ワーク領域サイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: バインドIDにカレントディレクトリを設定します。 必要なワーク領域が確保できない場合、カレントディレクトリの設定に失敗します。 この場合、既に設定されているカレントディレクトリ設定は破棄されます。 バインドIDを利用してファイルを参照する際に、カレントディレクトリがパス名の前に付加されます。 指定するワーク領域のサイズは、設定するカレントディレクトリ名を格納するために使用されます。 最低でも、strlen(path)+1 バイトの領域を確保して渡してください。 メモリ確保/解放コールバック関数が登録されている場合、ワーク領域にnull(ワークサイズは0)を設定すると、 必要なワーク領域をメモリ確保/解放コールバック関数を使用して動的に確保します。
SetPathSeparatorForBindFiles(ArgString)
複数ファイルバインド用パスセパレータの指定
Declaration
public static CriErr.Error SetPathSeparatorForBindFiles(ArgString filter)
Parameters
Type | Name | Description |
---|---|---|
ArgString | filter | セパレータとして使用する文字の一覧 |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: BindFiles(CriFsBinder, ArgString, out CriFsBind, IntPtr, int) 関数がセパレータとして解釈する文字を変更します。 BindFiles(CriFsBinder, ArgString, out CriFsBind, IntPtr, int) 関数を使って複数のファイルをバインドする場合、 ファイルパスをセパレータで結合した文字列を指定する必要があります。
備考: filter に空文字列("")を指定した場合、セパレータが無効になります。 filter に null を指定した場合、設定がデフォルト状態に戻ります。
注意: BindFiles(CriFsBinder, ArgString, out CriFsBind, IntPtr, int) 関数以外の関数にセパレータを含むパスを渡した場合、 CRI File Systemライブラリは不正なパスとして処理されます。 (セパレータ以降のパスが無効になります。) BindFiles(CriFsBinder, ArgString, out CriFsBind, IntPtr, int) 関数を使用しない場合でも、
SetPriority(CriFsBind, int)
プライオリティ値の設定
Declaration
public static CriErr.Error SetPriority(CriFsBind bndrid, int priority)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
int | priority | プライオリティ値 |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: バインドIDにプライオリティを設定します。 プライオリティにより、バインダーオブジェクト内における、バインドIDの検索順を制御できます。 バインド時のプライオリティ値は0です。 同プライオリティ内の検索順は、後に SetPriority(CriFsBind, int) が指定された順番になります。 SetPriority(CriFsBind, int) が呼び出されていない場合、先にバインドされた順番になります。 プライオリティ値の大きい方が高プライオリティとなり、検索順が高くなります。
SetUserHeapFunc(delegate* unmanaged[Cdecl]<IntPtr, uint, IntPtr>, delegate* unmanaged[Cdecl]<IntPtr, IntPtr, void>, IntPtr)
バインダーモジュール関数で使用されるメモリ管理関数の登録/削除
Declaration
public static CriErr.Error SetUserHeapFunc(delegate* unmanaged[Cdecl]<IntPtr, uint, IntPtr> allocfunc, delegate* unmanaged[Cdecl]<IntPtr, IntPtr, void> freefunc, IntPtr obj)
Parameters
Type | Name | Description |
---|---|---|
delegate* unmanaged[Cdecl]<IntPtr, uint, IntPtr> | allocfunc | メモリ確保関数 |
delegate* unmanaged[Cdecl]<IntPtr, IntPtr, void> | freefunc | メモリ解放関数 |
IntPtr | obj | メモリ管理オブジェクト |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: CriFsBinder関数の引数で指定するワーク領域に null を指定した場合、内部から呼ばれるメモリ管理関数を登録します。 CriFsBinder関数に null 以外を指定した場合は、渡された領域を利用します。 本関数により、CriFsBinder関数に必要なワーク領域の管理をユーザー独自のメモリ管理関数で動的に行うことが可能になります。 本関数によりメモリ管理関数を設定する場合は、 InitializeLibrary(in Config, IntPtr, int) 関数の直後に本関数を呼び出してください。 本関数の引数allocfunc, freefuncがnullの場合、登録されたメモリ管理関数を削除します。 CriFsBinder関数は、現在登録されているメモリ管理関数を使用しますので、一旦登録されたメモリ管理関数を削除/変更する場合は、 登録されたメモリ管理関数を利用して確保されたメモリ領域が無いことを確認するようにしてください。
SetUserMallocFunction(delegate* unmanaged[Cdecl]<IntPtr, uint, IntPtr>, IntPtr) 関数との関係: 本関数で登録されるメモリ管理関数はCriFsBinder関数での使用に限定されます。 本関数でメモリ管理関数を登録せず、SetUserMallocFunction(delegate* unmanaged[Cdecl]<IntPtr, uint, IntPtr>, IntPtr) 関数で関数が登録されている場合は、 SetUserMallocFunction(delegate* unmanaged[Cdecl]<IntPtr, uint, IntPtr>, IntPtr) 関数で登録された関数がメモリ確保時に呼出されます。 本関数で登録された関数がある場合は、本関数で登録されたメモリ確保関数が呼出されます。
CPKバインドについて: CPKバインド時には、GetWorkSizeForBindCpk(ArgString, out int)関数の項にも記されてる通り、CPK解析に必要なワーク領域のサイズが CPKの構成に依ってしまうので、事前に必要なワークサイズを見積ることが困難です。 本関数により、CPK解析エンジンが要求するメモリの管理をユーザー独自のメモリ管理関数で行うことが可能になります。
SetupCpkIdAccessTable(CriFsBind, int, IntPtr, int)
ID情報付CPK アクセス情報テーブルの作成
Declaration
public static CriErr.Error SetupCpkIdAccessTable(CriFsBind binderid, int steps, IntPtr work = default, int worksize = 0)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | binderid | バインドID |
int | steps | アクセス情報テーブル作成の作成間隔 |
IntPtr | work | アクセス情報テーブル作成用ワーク領域 |
int | worksize | アクセス情報テーブル作成用ワーク領域のサイズ |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: ID情報付CPKのアクセス情報テーブルを作成します。 アクセス情報テーブルを作成した場合、該当CPKのコンテンツへのアクセスが高速になります。 本関数は完了復帰関数です。コンテンツファイル数が多い場合、復帰までに時間がかかる場合があります。 ID情報のないCPKではアクセステーブルは作成されません。 本関数はID情報付CPKに対してのみ有効です。 アクセス情報テーブルの領域は、該当CPKがバインドされている間は解放したり、他へ転用しないでください。 アクセス情報テーブルの領域は、該当CPKをアンバインドした後に解放してください。
Unbind(CriFsBind)
バインドIDの削除(アンバインド):完了復帰関数
Declaration
public static CriErr.Error Unbind(CriFsBind bndrid)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード |
Remarks
説明: バインドIDをバインダーから削除します。 本関数は完了復帰関数です。 指定されたバインドIDを削除できない場合、Ngを返します。
補足: 必要に応じてファイルのクローズ処理を行いますので、実行環境により数msecかかる場合があります。 アンバインドするバインドIDに依存している他のバインドIDも同時にアンバインドされます(暗黙的アンバインド)。 例えば、CPKバインドIDのコンテンツファイルをFILEバインドしているバインドIDは、 参照元のCPKバインドIDがアンバインドされると、暗黙的アンバンドされます。 暗黙的にアンバインドされた項目は、暗黙的アンバインドリストに追加されます。 暗黙的アンバインドされたバインドIDは、通常どおりにUnbind(CriFsBind)関数でアンバインドするか、 CleanImplicitUnbindList()関数で暗黙的アンバインドリストをクリアする必要があります。
UnbindAsync(CriFsBind)
バインドIDの削除(アンバインド):即時復帰関数
Declaration
public static CriErr.Error UnbindAsync(CriFsBind bndrid)
Parameters
Type | Name | Description |
---|---|---|
CriFsBind | bndrid | バインドID |
Returns
Type | Description |
---|---|
CriErr.Error | エラーコード * |
Remarks
説明: バインドIDをバインダーから削除します。 本関数は即時復帰関数です。 指定されたバインドIDを削除できない場合、Ngを返します。 アンバインド処理を進行させるには、サーバー処理 criFsExecuteMain 関数と、GetStatus(CriFsBind, out Status) 関数の 呼び出しが必要です。 *
アンバインド完了の検知: アンバインド処理の完了は GetStatus(CriFsBind, out Status) 関数で取得されるステータスにより判断します。 アンバインド処理中のステータスは Unbind になります。 アンバインド完了後のステータスは Removed となります。 *
補足: バインドIDとして取り得る値で、その時点において使用されていない値を指定した場合、取得されるステータスは Removedになります。 アンバインドするバインドIDに依存している他のバインドIDも同時にアンバインドされます(暗黙的アンバインド)。 例えば、CPKバインドIDのコンテンツファイルをFILEバインドしているバインドIDは、 参照元のCPKバインドIDがアンバインドされると、暗黙的アンバンドされます。 暗黙的にアンバインドされた項目は、暗黙的アンバインドリストに追加されます。 暗黙的アンバインドされたバインドIDは、通常どおりにUnbind(CriFsBind)関数でアンバインドするか、 CleanImplicitUnbindList()関数で暗黙的アンバインドリストをクリアする必要があります。 *