etc.negui.file.file

ファイルとパス。
Phobosがchar[]大好きだったんで必要分だけ再構築。
std.pathとstd.fileの役割を統合。
History:
1.000
  • sourceNeGuiが依存している部分あったんでpackageをNeGuiに移動、全然GUIじゃない。
1.00β16
  • std.fileをimportしないように変更。
abstract class NeGuiFileBaseException: etc.negui.system.exception.NeGuiException;

class NeGuiPathException: etc.negui.file.file.NeGuiFileBaseException;

class NeGuiFileException: etc.negui.file.file.NeGuiFileBaseException;

class DriveBaseException: etc.negui.file.file.NeGuiFileException;

class DriveException: etc.negui.file.file.DriveBaseException;

class DiskException: etc.negui.file.file.DriveBaseException;

struct PATH;
ファイルパス。
std.pathと違い文字列だけに作用するワケではない。
NeGuiの基準
  • フォルダで統一。
  • フォルダの最後は\
MAX_NAME
最大ファイル名長
MAX_PATH
最大パス長。
static immutable Text sep;
パス中でのフォルダ区切り文字。
static immutable Text pathsep;
パスとパスの区切り文字。
static immutable Text curdir;
カレントフォルダ。
static immutable Text pardir;
親フォルダを表す文字列。
static bool isFolderPath(in Text Path );
フォルダパス判定。
NeGui基準で最後がPATH.sepをフォルダとする。
Params:
Text Path
調べるパス。
Returns:
フォルダならtrue、違えばfalse。
History:
1.100
  • sourcePATH.sepの使用。
static Text addFolderSep(in Text Path );
パスをフォルダに。
Params:
Text Path
パス。
Returns:
変換後のパス。 Pathが元からフォルダならPath自身を返す。
History:
1.100
  • source戻り値をrefへ。
  • sourcePATH.sepの使用。
static Text delFolderSep(in Text Path );
フォルダから非フォルダパスへ。
終端のフォルダ区切り文字を削除。
Params:
Text Path
パス。
Returns:
変換後のパス。 Pathの終端がフォルダ区切り文字でない場合はPathを。
History:
1.100
  • source戻り値をrefへ。
static Text join(in Text RootPath , in Text[] AddPath ...);
パスの結合。
Params:
Text RootPath
結合元となるパス。
Text[] AddPath
RootPathに結合するパス。
Returns:
結合後のパス。
History:
1.081
  • 新規作成。
static Text getExtension(in Text Path );
拡張子取得。
Params:
Text Path
拡張子を取得したいパス。
Returns:
拡張子。
History:
1.100
  • source戻り値をrefへ。
  • bug拡張子なしの場合に.なければエラー。
static Text changeExtension(in Text Path , in Text Extension );
拡張子の変更。
Params:
Text Path
パス名。
Text Extension
変更する拡張子。
Returns:
Pathに拡張子が無い場合は.Extensionが追加される。
History:
1.100
  • source戻り値をrefへ。
1.063
  • 新規作成。
static Text getFileName(in Text path );
ファイル名取得。
Params:
Text path
ファイル名を取得したいパス。
Returns:
ファイル名。 こいつは拡張子付き。
History:
1.100
  • source戻り値をrefへ。
static Text getName(in Text path );
ファイル名取得。
Params:
Text path
ファイル名を取得したいパス。
Returns:
ファイル名。 こいつは拡張子無し。
History:
1.100
  • source戻り値をrefへ。
1.00β16
  • features拡張子のみ(.htaccess等の隠しファイル)をファイル名として扱うように変更。
1.00β11
  • bugスライスで死ぬ対策。
static Text ownerFolder(in Text path );
親フォルダ取得。
Params:
Returns:
親フォルダ。
Out:
戻り値に長さがあれば最後は\で終わってる。
History:
1.100
  • source戻り値をrefへ。
  • sourcePATH.sepの使用。
1.100
  • sourcePhobosを使用しない様に変更。
  • source名前変更(getOwnerFolder -> ownerFolder)。
static int cmp(in Text path1 , in Text path2 );
ファイルパス比較。
単純にファイル文字列の比較であって相対パス等は考慮しない。
History:
1.00β11
  • 新規作成。
static Text modulePath(HINSTANCE hInstance , size_t Length = (PATH).MAX_PATH);
モジュールのパスを取得。
History:
1.100
  • source戻り値をrefへ。
1.00β17
  • 新規作成。
static Text myPath(size_t Length = (PATH).MAX_PATH);
自身のアドレス取得。
History:
1.100
  • source戻り値をrefへ。
1.00β14
  • MyPathの引数追加に合わせてデフォルト引数の追加。
1.00β11
  • 新規作成。
static Text myFolder(size_t Length = (PATH).MAX_PATH);
自身の親フォルダ。
History:
1.100
  • source戻り値をrefへ。
1.00β14
  • MyPathの引数追加に合わせてデフォルト引数の追加。
1.00β11
  • nemuxi.baseから移動。
static Text currentFolder();
カレントフォルダ取得。
History:
1.100
  • source戻り値をrefへ。
1.100
  • 新規作成。
static bool currentFolder(in Text Path , bool ThrowException = false);

class NeFile: etc.negui.system.raii.HandleRaii;
ファイル。
色々あって実装してみたものの使う機会あんましない。 std.streamかstd.stdio.File使うべきだよ。
History:
1.100
  • 新規作成。
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 );
現在位置の変更。
Returns:
変更後の位置、
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 );
読み込み。
Params:
Buffer
読み込む領域。
Returns:
正常に読み込めた場合はtrue、失敗した場合はfalseを返す。 仮にshortを読み込もうとしてbyteしか読めなかった場合はシークを呼び出し前の位置に直してfalseを返す。
size_t read(T)(ref T[] Buffer );
読み込み。
Params:
Buffer
読み込む領域。
Returns:
Bufferの有効なインデックスを返す。
bool put(T)(T Buffer );
書き込み。
Params:
Buffer
書き込む値。
Returns:
正常に書き込めた場合はtrue、失敗した場合はfalseを返す。 仮にshortを書き込もうとしてbyteしか書けなかった場合はシークを呼び出し前の位置に直してfalseを返す。
size_t write(T)(in T[] Buffer );
書き込み。
Params:
Buffer
書き込む値。
Returns:
書き込まれたBufferの有効なインデックスを返す。
struct FILE;

enum ATTRIBUTE;

ARCHIVE
アーカイブファイルまたはアーカイブディレクトリです。アプリケーションはこの属性を、ファイルのバックアップや削除のためのマークとして使います。
COMPRESSED
指定されたファイルまたはディレクトリは圧縮されています。ファイルの場合、ファイル内の全データが圧縮されていることを意味します。ディレクトリの場合、そのディレクトリ内に新しく作成されるファイルまたはサブディレクトリが、既定で圧縮状態になることを意味します。
DEVICE
予約済み。使わないでください。
FOLDER
指定されたハンドルは、ディレクトリに関連しています。
ENCRYPTED
指定されたファイルまたはディレクトリは暗号化されています。ファイルの場合、ファイル内の全データストリームが暗号化されていることを意味します。ディレクトリの場合、そのディレクトリ内に新しく作成されるファイルまたはサブディレクトリが、既定で暗号化状態になることを意味します。
HIDDEN
隠しファイルまたは隠しディレクトリです。通常のディレクトリリスティングでは表示されません。
NORMAL
指定されたファイルまたはディレクトリには、特に属性はありません。単独で返った場合にのみ、この属性は有効です。
NOT_CONTENT_INDEXED
Windows 2000:このファイルは、「インデックスサービス」の対象になっていません。
OFFLINE
Windows 2000:このファイルのデータは、すぐには利用できません。この属性は、ファイルのデータがオフラインの記憶装置へ物理的に移動されたことを示します。この属性は、 Windows 2000 の階層記憶管理ソフトウェアである「リモート記憶域」が利用するものです。アプリケーションは、任意にこの属性を変更するべきではありません。
READONLY
このファイルまたはディレクトリは読み取り専用です。アプリケーションはこのファイルの読み取りを行えますが、書き込みや削除はできません。ディレクトリの場合、アプリケーションは削除を行えません。
REPARSE_POINT
このファイルには、再解析ポイントが関連付けられています。
SPARSE_FILE
このファイルは、スパースファイル(疎なファイル、未使用の領域が多い、または同じ値が長く続くファイル)です。
SYSTEM
このファイルまたはディレクトリは、オペレーティングシステムの一部、またはオペレーティングシステム専用です。
TEMPORARY
このファイルは、一時ファイルとして使われています。ファイルシステムは、データをハードディスクのような大容量記憶装置へ書き込む代わりに、高速なアクセスが行えるよう、すべてのデータをメモリ内に維持することを試みます。アプリケーションは、必要がなくなった段階で一時ファイルをすぐに削除するべきです。
static ATTRIBUTE attributes(in Text path );
static bool attributes(in Text path , ATTRIBUTE Attribute );

static bool isExistence(in Text path );
指定アドレスは存在するか。
Params:
Text path
調べたいアドレス。
Returns:
存在すればtrue、しなければfalse。
static bool isFolder(in Text path );
指定アドレスはフォルダか。
Params:
Text path
調べたいアドレス。
Returns:
フォルダならtrue。
Throws:
アドレス自体が存在しなければNeGuiFileException。
static bool isFile(in Text path );
指定アドレスはファイルか。
Params:
Text path
調べたいアドレス。
Returns:
ファイルならtrue。
Throws:
アドレス自体が存在しなければNeGuiFileException。
static bool makeFolder(in Text path , bool Recurse = true);
フォルダ作成。
Params:
Text path
フォルダ
static bool delFolder(in Text path , bool AllDelete = false);
History:
1.100
  • featuresファイルの有無による処理。
Throws:
AllDeleteがtrueでファイル列挙に失敗すればNeGuiExceptionを投げる
enum MOVEFLAG;

COPY_ALLOWED
他のボリュームへファイルを移動するよう指示された場合、この関数は、CopyFile 関数と DeleteFile 関数を使って、その動作をシミュレートします。このフラグを、MOVEFILE_DELAY_UNTIL_REBOOT フラグと共に指定することはできません。
CREATE_HARDLINK
将来の使用に備えて予約されています。
DELAY_UNTIL_REBOOT
この関数は、オペレーティングシステムを再起動するまでファイルを移動しません。システムは、AUTOCHK(Windows NT/2000 に付属していて、Chkdsk に相当し、起動時に実行できます)を実行した直後、かつページングファイルを作成する前にファイルを移動します。その後、この値が指定されている場合は、この関数は前回のスタートアップに使ったページングファイルを削除できます。このフラグを指定できるのは、Administrators グループに所属するユーザーのコンテキスト、または LocalSystem アカウントのコンテキストだけです。このフラグを、MOVEFILE_COPY_ALLOWED フラグと共に指定することはできません。
FAIL_IF_NOT_TRACKABLE
Windows 2000:移動元ファイルがリンクソースの場合、このファイルは失敗します。そして、移動後は、そのファイルのリンクトラッキングを行えません。FAT ファイルシステムでフォーマットされたボリュームを移動先として指定すると、このような問題が発生することがあります。
REPLACE_EXISTING
lpNewFileName パラメータで指定されたファイル名が既に存在していた場合、その内容を lpExistingFileName パラメータで指定されたファイルに置き換えます。lpNewFileName と lpExistingFileName どちらかのパラメータでディレクトリを指定した場合は、この値を利用できません。
WRITE_THROUGH
ファイルがディスク上で実際に移動するまで、制御を返しません。このフラグを指定すると、コピーと削除の操作からなる移動操作をディスクへフラッシュした(実際に書き込んだ)後、この関数から制御が返ることが保証されます。コピー操作が終わった後、フラッシュが実施されます。このフラグは、MOVEFILE_DELAY_UNTIL_REBOOT フラグが指定されていると機能しません。
static bool move(in Text SrcPath , in Text NewPath );
static bool move(in Text SrcPath , in Text NewPath , MOVEFLAG MoveFlags );

static bool copy(in Text SrcPath , in Text NewPath , bool Overwrite );

static long fileSize(in Text Path );

static ulong fileSizeCompressed(in Text Path );

static TIMESTAMP timeStamp(in Text Path , TIMESTAMP.FLAG Flags = (FLAG).ALL);

static bool timeStamp(in Text Path , ref const TIMESTAMP TimeStamp );

static Text makeTempFile(in Text Folder , in Text Prefix = (Text).init);

static Text getTempFile(in Text Folder , in Text Prefix = (Text).init, size_t Unique = 1);

struct DISKSPACE;

struct DRIVE;

static DISKSPACE diskSpace(in Text Folder );

enum TYPE;

UNKNOWN
不明です。
NO_ROOT_DIR
指定したルートディレクトリは存在しません。
REMOVABLE
ドライブからディスクを抜くことができます。
FIXED
ドライブからディスクを抜くことができません。
REMOTE
ネットワーク ドライブです。
CDROM
CD-ROM ドライブです。
RAMDISK
RAM ディスク ドライブです。
static TYPE type(in Text Drive );

static BIT!(uint) drives();

static Text[] names();