enum ACCESS_MODE;
NONE
オブジェクトへのデバイス問い合わせアクセスを指定します。アプリケーションは、デバイスにアクセスすることなく、デバイス属性の問い合わせを行えます。
READ
オブジェクトへの読み取りアクセスを指定します。データの読み取りとファイルポインタの移動ができます。読み書きアクセスを行うには、GENERIC_WRITE と共に指定します。
WRITE
オブジェクトへの書き込みアクセスを指定します。データの書き込みとファイルポインタの移動ができます。読み書きアクセスを行うには、GENERIC_READ と共に指定します。
enum SHARE;
DELETE
Windows NT/2000:これ以降、オブジェクトを開こうとしたときに削除アクセスを要求した場合のみ、その操作を許可します。
READ
これ以降、オブジェクトを開こうとしたときに読み取りアクセスを要求した場合のみ、その操作を許可します。
WRITE
これ以降、オブジェクトを開こうとしたときに書き込みアクセスを要求した場合のみ、その操作を許可します。
enum DISPOSITION;
CREATE_NEW
新しいファイルを作成します。指定したファイルが既に存在している場合、この関数は失敗します。
CREATE_ALWAYS
新しいファイルを作成します。指定したファイルが既に存在している場合、そのファイルを上書きし、既存の属性を消去します。
OPEN_EXISTING
ファイルを開きます。指定したファイルが存在していない場合、この関数は失敗します。デバイスに対して CreateFile 関数を呼び出す際に OPEN_EXISTING フラグを使うべき状況については、この関数の「解説」を参照してください。
OPEN_ALWAYS
ファイルが存在している場合、そのファイルを開きます。指定したファイルが存在していない場合、この関数は dwCreationDisposition パラメータで CREATE_NEW が指定されていたと仮定して新しいファイルを作成します。
TRUNCATE_EXISTING
ファイルを開き、ファイルのサイズを 0 バイトにします。呼び出し側プロセスは、dwDesiredAccess パラメータで、少なくとも GENERIC_WRITE アクセス権を指定しなければなりません。指定したファイルが存在していない場合、この関数は失敗します。
enum FLAG;
WRITE_THROUGH
キャッシュに書き込まれたデータを直接ディスクに書き込むようシステムに指示します。システムは依然としてキャッシュ書き込み操作を行えますが、ディスクへの遅延書き込みは無効になります。
OVERLAPPED
オブジェクトを初期化するようシステムに指示します。その結果、非常に長い時間のかかる処理に対して ERROR_IO_PENDING が返るようになります。この処理が終了すると、指定されたイベントはシグナル状態に設定されます。このフラグを指定したときは、ファイルの読み書きを行う関数で 1 個の 構造体を指定しなければなりません。つまり、FILE_FLAG_OVERLAPPED を指定した場合、アプリケーションはオーバーラップ読み書きを行わなければなりません。FILE_FLAG_OVERLAPPED を指定した場合、システムはファイルポインタを管理しません。ファイルの読み書きを行う関数に対し、1 個の OVERLAPPED 構造体を指している lpOverlapped パラメータの一部として、ファイルの位置を渡さなければなりません。また、このフラグを指定した場合、1 つのハンドルに対して複数の操作(たとえば、読み取りと書き込みそれぞれの操作)を同時に行うことができます。
NO_BUFFERING
バッファやキャッシュを使わずにファイルを開くようシステムに指示します。FILE_FLAG_OVERLAPPED フラグと共に指定すると、非同期操作のパフォーマンスが向上します。I/O 操作を行う際に、メモリマネージャの同期処理に依存する必要がなくなるからです。しかし、データがキャッシュ内に存在しないので、一部の I/O 操作には多くの時間がかかります。このフラグを指定した場合、アプリケーションは次の各条件を満たさなければなりません。
- ファイルアクセスの開始オフセットを、ボリュームのセクタサイズの整数倍にしなければなりません。
- ファイルアクセスのバイト数を、ボリュームのセクタサイズの整数倍にしなければなりません。たとえば、セクタサイズが 512 バイトの場合、512 バイト、1,024 バイト、2,048 バイトの読み書きはできますが、335 バイト、981 バイト、7,171 バイトなどの読み書きはできません。
- 読み書き操作用のバッファのアドレス(メモリ内のアドレス)を、ボリュームのセクタサイズの整数倍に整列(セクタ整列)させなければなりません。ディスクによっては、この要件を満たせないこともあります。
3 番目の条件を満たす、つまりバッファをボリュームのセクタサイズの整数倍の位置に整列させる 1 つの方法は、 関数を使ってバッファを割り当てることです。VirtualAlloc 関数が割り当てるメモリは、オペレーティングシステムのメモリページサイズの整数倍の位置に整列されています。メモリページとボリュームのセクタサイズは両方とも 2 のべき乗なので、このメモリは、ボリュームのセクタサイズの整数倍のアドレスにも整列されます。ボリュームのセクタサイズを求めるには、GetDiskFreeSpace 関数を使います。また、ページサイズを調べるには、 関数を使います。
RANDOM_ACCESS
このファイルをランダムアクセスすることをシステムに指示します。システムは、この指定をファイルのキャッシングを最適化するためのヒントとして使います。
SEQUENTIAL_SCAN
ファイルを最初から最後までシーケンシャルに(連続)アクセスすることをシステムに指示します。システムは、この指定をファイルのキャッシングを最適化するためのヒントとして使います。この場合、アプリケーションはランダムアクセスを行う目的でファイルポインタを移動することはできますが、最適なキャッシングが達成できなくなる可能性があります。しかし、ランダムアクセスを正しく行えることは保証されています。このフラグを指定すると、大きなファイルをシーケンシャルアクセスするアプリケーションのパフォーマンスが向上します。基本的にシーケンシャルアクセスを行い、ときどき小規模な範囲をスキップするアプリケーションでは、特に大きな向上が見られることもあります。
DELETE_ON_CLOSE
FILE_FLAG_DELETE_ON_CLOSE を指定したハンドルを除き、このファイルに関連付けられているすべてのハンドルが閉じた段階で、そのファイルを即座に削除するようシステムに指示します。それ以降、FILE_SHARE_DELETE を指定しない限り、このファイルを開くよう要求しても失敗します。
BACKUP_SEMANTICS
Windows NT/2000:バックアップまたは復元操作の目的で、ファイルを開くまたは作成するようシステムに指示します。呼び出し側プロセスがファイルセキュリティに関して十分な権限を備えていることを前提として、システムは、そのプロセスがファイルセキュリティのチェックを無効にできることを保証します。これに関連する権限は、 SE_BACKUP_NAME と SE_RESTORE_NAME です。ディレクトリのハンドルを取得する目的で、このフラグを指定することもできます。特定の Win32 関数で、ファイルハンドルの代わりにディレクトリハンドルを指定することもできます。
POSIX_SEMANTICS
POSIX(UNIX ベースのポータブル OS)の規則に従ってファイルにアクセスするようシステムに指示します。この規則には、ファイル名が同じで大文字と小文字だけが異なる複数のファイルを認めるファイルシステムに対し、それらのファイルへのアクセスを認めることが含まれます。このフラグを指定する場合、注意が必要です。MS-DOS または 16 ビット版 Windows からは、このフラグを指定して作成したファイルにアクセスできないからです。
OPEN_REPARSE_POINT
このフラグを指定すると、NTFS の再解析ポイントで再解析を行うことを禁止します。このフラグを指定してファイルを開くと、再解析ポイントを制御するフィルタが動作しているかどうかにかかわりなく、ファイルハンドルが返ります。このフラグと共に CREATE_ALWAYS フラグを指定することはできません。
OPEN_NO_RECALL
ファイルのデータを要求すると共に、そのデータを継続的にリモート記憶域に配置するべきことをシステムに指示します。そのファイルをローカル記憶域へ復帰させるべきではありません。このフラグは、リモート記憶域システム、言い換えると階層記憶管理システムで使うことを意図しています。
this(HANDLE Handle
, bool Suicide
, bool IsSeek
);
this(in Text Path
, ACCESS_MODE AccessMode
, SHARE Shere
, in SECURITY* Security
, DISPOSITION Disposition
, FILE.ATTRIBUTE Attribute
, FLAG Flags
, NeFile Template
, bool IsSeek
);
this(in Text Path
, ACCESS_MODE AccessMode
, SHARE Shere
, ref const SECURITY Security
, DISPOSITION Disposition
, FILE.ATTRIBUTE Attribute
, FLAG Flags
, NeFile Template
, bool IsSeek
);
this(in Text Path
, ACCESS_MODE AccessMode
, SHARE Shere
, DISPOSITION Disposition
, FILE.ATTRIBUTE Attribute
, FLAG Flags
, bool IsSeek
);
static NeFile reader(in Text Path
);
static NeFile writer(in Text Path
);
enum TYPE;
UNKNOWN
DISK
CHAR
指定されたファイルは、LPT デバイスやコンソールのような文字ファイルです。
PIPE
指定されたファイルは、名前付きまたは名前なしパイプです。
const TYPE type();
enum LOCK;
この関数の動作を修飾するフラグを指定します。このパラメータで、次の値のいずれかまたは任意の組み合わせを指定します。
FAIL_IMMEDIATELY
要求したロックを獲得できなかった場合、この関数はすぐに制御を返します。この値を指定しなかった場合は、ロックを獲得できるまで待ち続けます。
EXCLUSIVE_LOCK
この関数は、排他ロックを要求します。この値を指定しなかった場合は、共有ロックを要求します。
bool lock(ref const LARGE Offset
, ref const LARGE Size
);
bool lock(LOCK Lock
, ref const LARGE Size
, ref OVERLAPPEDINFO OverlappedInfo
);
bool unLock(ref const LARGE Offset
, ref const LARGE Size
);
bool unLock(ref const LARGE Size
, ref OVERLAPPEDINFO OverlappedInfo
);
enum SEEK;
TOP
0、またはファイルの先頭が開始点になります。このフラグを指定すると、liDistanceToMove パラメータは符号のない値として解釈されます。
NOW
END
const LARGE seekTo(ref const LARGE Position
, SEEK Seek
);
const LARGE position();
const LARGE position(LARGE Large
);
bool seekToTop();
bool seekToEnd();
bool eof();
bool setEof();
final bool flush();
final bool cancel();
protected size_t Read(void* Buffer
, size_t BufferSize
);
protected size_t Write(in void* Buffer
, size_t BufferSize
);
bool get(T)(out T Buffer
);
読み込み。
- Returns:
- 正常に読み込めた場合はtrue、失敗した場合はfalseを返す。
仮にshortを読み込もうとしてbyteしか読めなかった場合はシークを呼び出し前の位置に直してfalseを返す。
size_t read(T)(ref T[] Buffer
);
読み込み。
- Returns:
- Bufferの有効なインデックスを返す。
bool put(T)(T Buffer
);
書き込み。
- Returns:
- 正常に書き込めた場合はtrue、失敗した場合はfalseを返す。
仮にshortを書き込もうとしてbyteしか書けなかった場合はシークを呼び出し前の位置に直してfalseを返す。
size_t write(T)(in T[] Buffer
);
書き込み。
- Returns:
- 書き込まれたBufferの有効なインデックスを返す。