|
DelphiXE3 [FMX] ファイル操作関連(1) 2014/06/23 |
前回は、TStringHelperついて少し見てみました。
今回は、ファイル、フォルダ(ディレクトリ)、パス名などを操作する機能について少し見ていきます。
[Dialogs]内の
・「開く」画面(OpenDialog)
・「保存」画面(SaveDialog)
・ファイル
については既に記述した通りです。
まずは、下図のようにコンポーネントを配置して以下のようなコードを書いてみます。
procedure TForm1.OpenIniFile;
var
IniFile : TIniFile;
begin
IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));
try
Form1.Left := IniFile.ReadInteger('Form','X',0);
Form1.Top := IniFile.ReadInteger('Form','Y',0);
except
;
end;
IniFile.Free;
end;
procedure TForm1.SaveIniFile;
var
IniFile : TIniFile;
begin
IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));
try
IniFile.WriteInteger('Form','X', Form1.Left);
IniFile.WriteInteger('Form','Y', Form1.Top);
except
;
end;
IniFile.Free;
end;
// 起動時
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := '';
OpenIniFile;
end;
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SaveIniFile;
end;
// [ボタン1]
procedure TForm1.Button1Click(Sender: TObject);
var
fn : string ;
begin
fn := Edit1.Text ;
if (fn = '') then fn := ParamStr(0);
if not(FileExists(fn)) then fn := ParamStr(0);
OpenDialog1.InitialDir := ExtractFilePath(fn);
OpenDialog1.FileName := ChangeFileExt(ExtractFileName(fn),'');
if (OpenDialog1.Execute) then begin
fn := OpenDialog1.FileName ;
Edit1.Text := fn ;
end;
end; |
よく行うパターンのプログラムコードです。保存・コンパイル・実行をすると下図のようになります。
↓
これは、あくまでも Windows7 での表示画面です。
プラットフォームに「Mac OS X」を選択して、MacOS上で実行させる場合には違った画面になります。デジカメで撮影した画面なので綺麗ではありませんが…。
↓
「開く」ダイアログに「ファイルの種類」(フィルタ)の指定がありませんが、ParamStr(0)、ExtractFilePath()、ExtractFileName()、ChangeFileExt() といった関数等は想定通りに動作しているようですし、iniファイルの保存・読み込みもうまく動いている様子です。フォルダ・ファイルの実体がどうなっているのかはよく分かりませんが。
それでは、従来の、System 内にあるファイル・フォルダ操作関連のルーチンについて見てみます。ファイルの外から操作するものと、ファイルの内から操作するものがありますので分けておきます。まずは、外からのものから。
ChDir | 現在のディレクトリを変更します。 |
GetDir | カレント ディレクトリを返します。 |
MkDir | 新しいサブディレクトリを作成します。 |
ParamCount | コマンドラインで渡されたパラメータの数を返します。 |
ParamStr | 指定されたパラメータをコマンドラインから取得して返します。 |
RmDir | 空のサブディレクトリを削除します。 |
ChDir |
procedure ChDir(const S: string);
procedure ChDir(P: PChar); |
現在のディレクトリを変更します。
メモ: ChDir 手続きは,現在のディレクトリを S または P で指定されたパスに変更します。この処理が失敗すると,EInOutError が生成されます。
メモ: Windows の場合,このパスにドライブ指定子が含まれる場合がありますが,その場合は現在のドライブも変更されます。
メモ: Delphi では,{$I+} を使用すると,実行時エラーを例外を使って処理できます。{$I-} を使用する場合は,IOResult で入出力エラーを調べてください。 |
GetDir | procedure GetDir(Drive: Byte; var S: String); |
カレント ディレクトリを返します。
メモ: GetDir は、S パラメータを、D パラメータによって指定されたドライブ上の、カレント ディレクトリに設定します。D は次の値のいずれかに設定できます:
メモ: GetDir は、エラー チェックを行いません。たとえば、無効な値 5(J ドライブ)が指定されても、S は、まるで無効なドライブのルート ディレクトリであるかのように J:\ を返します。 |
MkDir |
procedure MkDir(const S: string);
procedure MkDir(P: PChar); |
新しいサブディレクトリを作成します。
MkDir は、文字列 S または P で指定されたパスのサブディレクトリを新規作成します。
パスに含まれている最後の項目は、既存のファイル名以外でなければなりません。MkDir は、この最後のディレクトリのみ作成し、親ディレクトリは作成しません。これに対して、ForceDirectories は親ディレクトリも作成します。
メモ: Delphi では、{$I+} を指定した場合は、例外を使って実行時エラーが処理されます。{$I-} を使用する場合は、IOResult を使用して、I/O エラーがないか確認します。 |
ParamCount | function ParamCount: Integer; |
コマンドラインで渡されたパラメータの数を返します。
ParamCount は、コマンドラインでプログラムに渡されたパラメータの数を返します。 パラメータは、スペースまたはタブで区切られます。複数の語を 1 つのパラメータとする(空白を含むロング ファイル名など)には、2 重引用符(" ")を使用します。 |
ParamStr
| function ParamStr(Index: Integer): string; |
指定されたパラメータをコマンドラインから取得して返します。
ParamStr は、コマンドラインから Index に該当するパラメータを返すか、Index に ParamCount よりも大きな値が指定された場合には、空の文字列を返します。 たとえば、Index 値が 2 の場合、2 番目のコマンドライン パラメータを返します。
メモ: ParamStr(0) は、実行プログラム(たとえば、C:\TEST\MYPROG.EXE)のパスとファイル名を返します。
メモ: 複数の語を 1 つのパラメータとする(空白を含むロング ファイル名など)には、2 重引用符(" ")を使用します。 |
RmDir |
procedure RmDir(const S: string);
procedure RmDir(P: PChar); |
空のサブディレクトリを削除します。
RmDir 手続きは,S または P で指定されるパスからサブディレクトリを削除します。パスが存在しなかったり,空でなかったり,現在アクセスされているディレクトリであったりすると,入出力エラーが発生します。
メモ: Delphi では,{$I+} を使用すると,実行時エラーを例外を使って処理できます。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
次に、ファイルの内から操作するもの。引数にファイル変数をもつものです。ファイルの削除やファイル名変更は通常、ファイルの外から操作するという意識がありますが、Erase、Rename は引数にファイル変数を指定するのでこちら側に入れています。
Append | 既存のファイルを、末尾にテキストが追加されるように設定します。 |
Assign | 外部ファイルの名前をファイル変数に関連付けます。 |
AssignFile | 外部ファイルの名前をファイル変数と関連付けます。 |
BlockRead | 開いているファイルから 1 つ以上のレコードを読み取って変数に格納します。 |
BlockWrite | 1 つ以上のレコードを変数から、開いているファイルに書き込みます。 |
Close | ファイル変数と外部ファイルの関連付けを終了します。 |
CloseFile | ファイル変数と外部ディスクファイルの関連付けを終了します。 |
Eof | ファイルポインタがファイルの最後に達したかどうかをテストします。 |
Eoln | ファイルポインタが行末に達したかどうかをテストします。 |
Erase | Erase 手続きは外部ファイルを削除します。 |
FilePos | 現在のファイルポインタの位置を返します。 |
FileSize | ファイルのレコード数を返します。 |
Flush | 出力用に開いているテキストファイルのバッファをクリアします。 |
GetTextCodePage | テキスト ファイルのコード ページを取得します。 |
Read | ファイルからデータを読み込みます。 |
Readln | ファイルからテキストを 1 行読み込みます。 |
Rename | 外部ファイルの名前を変更します。 |
Reset | 既存のファイルを開きます。 |
Rewrite | 新しいファイルを作成して開きます。 |
Seek | 現在のファイルポインタを指定の位置に移動します。 |
SeekEof | ファイルのファイル終了ステータスを返します(ホワイトスペースは無視)。 |
SeekEoln | ファイルの行末ステータスを返します(ホワイトスペースは無視)。 |
SetLineBreakStyle | テキストファイル I/O 用の行の終わりおよびファイルの終わりの形式を指定します。 |
SetTextBuf | 入出力バッファをテキストファイルに割り当てます。 |
SetTextCodePage | テキスト ファイルのコード ページを設定します。 |
Write | 型付きファイルまたはテキスト ファイルにデータを書き込みます。 |
Writeln | テキスト ファイルに書き出し、行末マーカーを追加します。 |
Append
| function Append(var F: Text): Integer; |
既存のファイルを、末尾にテキストが追加されるように設定します。
Append を呼び出すと、ファイルが書き込み専用アクセスで開かれ、そのファイル ポインタがファイルの末尾に位置するように設定されます。F はテキスト ファイル変数で、AssignFile を使って外部ファイルと関連付けられる必要があります。指定された名前の外部ファイルが存在しない場合は、エラーが発生します。F で指定されたファイルが既に開いている場合は、いったん閉じてから開き直されます。ファイル ポインタの現在位置はファイルの末尾に設定されます。
System.Append は、0 か適切な I/O エラー コードのどちらかを返す標準手続きです。発生し得るエラーは次のいずれかです。
I/O チェックが有効な場合({$I+} の場合)は実行時エラー(さらに uses 句に SysUtils が含まれている場合は例外)
I/O チェックが無効な場合({$I-} の場合)は I/O エラー(System.IOResult 関数の場合と同様)
メモ: ファイルの最後の 128 バイト ブロックに Ctrl+Z(ASCII 26)が存在する場合は、そのブロック内の最初の Ctrl+Z が、次にファイルに追加された文字で上書きされるように、ファイル ポインタの現在位置が設定されます。こうして、Ctrl+Z で終わるファイルにテキストを付加することができます。
F に名前が割り当てられなかった場合は、Append の呼び出し後、F は標準出力ファイルを参照します。 |
Assign |
function Assign(var F: File; FileName: String;
[CodePage: Word]): Integer;
function Assign(var F: File; FileName: String;
[CodePage: Word]): Integer;
function Assign(var F: File; FileName: String;
[CodePage: Word]): Integer; |
外部ファイルの名前をファイル変数に関連付けます。
Assign を呼び出すと、Delphi コードでファイル変数を初期化できます。F は任意のファイル タイプのファイル変数です。FileName は文字列型の式または PChar 型の式(拡張構文が有効な場合)です。
Assign の呼び出し後、F は閉じられるまで外部ファイルに関連付けられます。これ以降は、ファイル変数 F を操作すると、FileName で指定された外部ファイルを操作することになります。
FileName パラメータが空の場合、Assign は F を標準入力ファイルまたは標準出力ファイルに関連付けます。空の名前を割り当てた場合、Reset (F) の呼び出し後、F は標準入力ファイルを指し、Rewrite (F) の呼び出し後、F は標準出力ファイルを指します。
既に開いているファイル変数に対しては、Assign を使用しないでください。
メモ: スコープの競合を避けるため、Delphi 製品の初期バージョンで使用可能であった Assign 手続きの代わりに、AssignFile が使用されます。ただし、下位互換性を保つため、Assign はまだ使用可能です。 |
AssignFile |
function AssignFile(var F: File; FileName: String;
[CodePage: Word]): Integer;
function AssignFile(var F: File; FileName: String;
[CodePage: Word]): Integer;
function AssignFile(var F: File; FileName: String;
[CodePage: Word]): Integer; |
外部ファイルの名前をファイル変数と関連付けます。
Delphi のコードでは,AssignFile プロシージャを呼び出すと,ファイル変数を初期化できます。F はファイル変数(型は任意)を示します。FileName は文字列表現です(拡張構文が有効な場合は,PChar 型)。
AssignFile を呼び出すと,F は開いている間,外部ファイルに結び付けられます。以降の F に対して行われる操作は,FileName で示される外部ファイルで行われます。
FileName が空の場合,AssignFile は,標準の入出力ファイルに F を結び付けます。Reset(F) を呼び出した場合は標準の入力ファイルに,Rewrite(F) を呼び出した場合は標準の出力ファイルにそれぞれ F を結び付けます。
すでに開いているファイル変数に対しては,AssignFile を使用しないでください。
メモ: スコープ上の競合を避けるために,旧バージョンの Delphi 製品で提供されていた Assign プロシージャのかわりに,AssignFile が提供されています。ただし,下位互換性を保つために Assign も使用できます。 |
BlockRead |
function BlockRead(var F: File; var Buf;
Count: Integer; [var Result: Integer]): Integer;
function BlockRead(var F: File; var Buf;
Count: Integer; [var Result: Integer]): Integer; |
開いているファイルから 1 つ以上のレコードを読み取って変数に格納します。
警告:これは古いメソッドであり、Buf パラメータに型が指定されておらずメモリ破損が生じる可能性があるため、使用するのは非常に危険です。 BlockRead および BlockWrite で使われるレコード サイズは、書き込み対象のファイルを開くために使用した Reset または Rewrite の呼び出しに対する任意指定の 2 番目のパラメータによって決まります。 アプリケーションでは、ストリームを使用することをお勧めします。 たとえば、ストリームを扱うユーザー プロシージャでは、これらの古いルーチンのようにファイルしか使用できないのではなく、TMemoryStreams と TFileStreams を使用することができます。
F は型指定のないファイル変数、Buf は任意の変数、Count は Integer 型の式、Result は Integer 型のオプションの変数です。
BlockRead は、ファイル F から Count 個(またはそれ以下)のレコードを読み取り、Buf の最初のバイト以降のメモリに格納します。 実際に読み取った完全なレコードの数(Count 以下)が Result に返されます。
転送されるブロック全体のサイズは、最大で Count * RecSize バイトです。 この RecSize は、ファイルを開くときに指定されたレコード サイズです(レコード サイズの指定がなければ 128 になります)。
ブロック全体が転送された場合、Result は Count と等しくなります。
Result が Count より小さい場合、BlockRead は転送が完了する前にファイルの末尾に到達しています。 ファイルのレコード サイズが 1 より大きい場合には、読み取った完全なレコードの数が Result に返されます。
Result が指定されていないと、読み取ったレコードの数が Count と等しくない場合に入出力エラーが発生します。 {$I+} コンパイラ指令が有効であれば、エラーが生じると EInOutError 例外が発生します。 |
BlockWrite
|
function BlockWrite(var F: File; const Buf;
Count: Integer; [var Result: Integer]): Integer;
function BlockWrite(var F: File; const Buf;
Count: Integer; [var Result: Integer]): Integer; |
1 つ以上のレコードを変数から、開いているファイルに書き込みます。
警告:これは古いメソッドであり、パラメータに型が指定されておらずメモリ破損が生じる可能性があるため、使用するのは非常に危険です。 BlockWrite および BlockRead で使われるレコード サイズは、書き込み対象のファイルを開くために使用した Reset または Rewrite の呼び出しに対する任意指定の 2 番目のパラメータによって決まります。 アプリケーションでは、ストリームを使用することをお勧めします。 たとえば、ストリームを扱うユーザー プロシージャでは、これらの古いルーチンのようにファイルしか使用できないのではなく、TMemoryStreams と TFileStreams を使用することができます。
F は型指定のないファイル変数、Buf は任意の変数、Count は Integer 型の式、Result は Integer 型のオプションの変数です。
BlockWrite は、Buf の最初のバイト以降のメモリから Count 個(またはそれ以下)のレコードを取り出し、ファイル F に書き込みます。 実際に書き込んだ完全なレコードの数(Count 以下)が Result に返されます。
転送されるブロック全体のサイズは、最大で Count * RecSize バイトです。 この RecSize は、ファイルを開くときに指定されたレコード サイズです(レコード サイズの指定がなければ 128 になります)。
ブロック全体が転送された場合、返される Result は Count と等しくなります。
Result が Count より小さい場合、転送が完了する前にディスクがいっぱいになっています。 このとき、ファイルのレコード サイズが 1 より大きい場合には、書き込んだ完全なレコードの数が Result に返されます。
BlockWrite は、現在のファイル位置を Result レコードだけ進めます。
Result が指定されていないと、書き込んだレコードの数が Count と等しくない場合に入出力エラーが発生します。 {$I+} コンパイラ指令が有効であれば、エラーが生じると EInOutError 例外が発生します。 |
Close
| function Close(var F: File): Integer; |
ファイル変数と外部ファイルの関連付けを終了します。
Close プロシージャは,従来のコードと互換性を保つために提供されています。Delphi で新しいアプリケーションを記述するときは,かわりに CloseFile を使用してください。
F は,Reset,Rewrite,Append を使って開いた任意のファイル型のファイル変数です。F と関連付けられた外部ファイルは完全に更新されてから閉じ,ファイルハンドルは再利用のために解放されます。 |
CloseFile
| procedure CloseFile(var F: File); |
ファイル変数と外部ディスクファイルの関連付けを終了します。
名前の競合を避けるため,Close プロシージャは CloseFile プロシージャに置き換わりました。CloseFile は,Close のかわりにファイル変数と外部ディスクファイルの関連付けの終了に使用します。
F は,Reset,Rewrite,または Append を使って開いた任意のファイル型のファイル変数です。F と関連付けられた外部ファイルは完全に更新されてから閉じ,ファイルハンドルは再利用のために解放されます。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
Eof
|
function Eof([var F: File]): Boolean;
function Eof([var F: File]): Boolean; |
ファイルポインタがファイルの最後に達したかどうかをテストします。
Delphi コードでは,Eof 関数は,現在のファイルポインタがファイルの終わりであるかどうかをテストします。F は,読み出し用に開かれているファイル変数です。指定しない場合は標準ファイル変数 Input になります。
Eof(F) は,現在のファイルポインタがファイルの最後の文字を超えている場合やファイルが空の場合は true を返し,それ以外の場合は false を返します。
メモ: Eof は,ファイル F が書き込み専用モードで開いている場合は失敗します。たとえば,Append または Rewrite で開かれたファイルでは Eof を使用することはできません。Append または Rewrite は,書き込み専用モードでファイルを開きます。 |
Eoln
|
function Eoln([var F: Text]): Boolean;
function Eoln([var F: Text]): Boolean; |
ファイルポインタが行末に達したかどうかをテストします。
Delphi のコードでは,Eoln 関数は,現在のファイルポインタがテキストファイルの行末であるかどうかをテストします。F はテキストファイル変数です(指定されている場合)。指定しない場合は標準ファイル変数 Input になります。
Eoln(F) は,現在のファイルポインタが行末にあるか,または Eof(F) が true の場合に true を返します。それ以外の場合,Eoln(F) は false を返します。 |
Erase | procedure Erase(var F: File); |
Erase 手続きは外部ファイルを削除します。
Delphi のコードでは,Erase 手続きは,F と関連付けられている外部ファイルを削除します。F は任意のファイル型のファイル変数です。
ファイルは,削除する前に必ず閉じてください。 |
FilePos
| function FilePos(var F: File): Integer; |
現在のファイルポインタの位置を返します。
Delphi のコードでは,開いているファイルのファイル変数で FilePos 関数を使用すると,ファイルの現在位置を判定できます。ファイルの現在の位置が先頭にある場合,FilePos は 0 を返します。そうでない場合,FilePos は現在位置からのバイトオフセットを返します。
FilePos は,開いていないファイルに対しては使用できません。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
FileSize
| function FileSize(var F: File): Integer; |
ファイルのレコード数を返します。
Delphi のコードでは,FileSize 関数を呼び出すと,ファイル変数 F で指定されたファイルのサイズがわかります。サイズは,レコードファイルのレコード数で表現されます。したがって,以下のようになります。
ファイルがバイトのファイルとして宣言されている場合,レコードサイズはデフォルトで 1 バイトになり,FileSize はファイルのバイト数を返す
Reset プロシージャはファイルを開くときにレコードサイズ(バイト単位)を設定できる。その場合,FileSize はファイルのレコード数を返す
メモ: ファイルが型なしファイルとして宣言されており,Reset を呼び出すときにレコードサイズを指定しない場合,FileSize のレコードサイズは 128 と想定されます。つまり,FileSize はバイト数を 128 で除算した値になります。
FileSize を使用するには,ファイルを開いておく必要があります。ファイルが空の場合,FileSize(F) は 0 を返します。 |
Flush
| function Flush(var t: Text): Integer; |
出力用に開いているテキストファイルのバッファをクリアします。
F はテキストファイル変数です。
Rewrite または Append を使って出力用に開いたテキストファイルの場合,Flush 関数はファイルのバッファを空にします。こうすると,その時点でファイルに書き込まれているすべての文字が実際に外部ファイルに書き込まれていることが保証されます。Flush は,入力用に開いたファイルに対しては何もしません。
Flush は,操作が成功した場合は 0 を返します。失敗した場合は,エラーコードを返します。{$I-} フラグを使ってコンパイルした場合,IOResult メソッドはこの値を返します。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
GetTextCodePage
| function GetTextCodePage(const T: Text): Word; |
テキスト ファイルのコード ページを取得します。
GetTextCodePage は、TTextRec 変数の CodePage フィールドの値を返します。 |
TTextRec = packed record
Handle: NativeInt;
Mode: Word;
Flags: Word;
BufSize: Cardinal;
BufPos: Cardinal;
BufEnd: Cardinal;
BufPtr: _PAnsiChr;
OpenFunc: Pointer;
InOutFunc: Pointer;
FlushFunc: Pointer;
CloseFunc: Pointer;
UserData: array[1..32] of Byte;
Name: array[0..259] of WideChar;
Buffer: TTextBuf;
CodePage: Word;
MBCSLength: ShortInt;
MBCSBufPos: Byte;
case Integer of
0: (MBCSBuffer: array[0..5] of _AnsiChr);
1: (UTF16Buffer: array[0..2] of WideChar);
end; |
TTextRec は、テキスト ファイルの内部形式です。
TTextRec は、テキスト型の Delphi 変数の内部形式です。この型の変数をユーザーが宣言することはありません。ただし、TTextRec を利用してテキスト ファイル変数を型キャストすると、ファイル名などの内部データ フィールドにアクセスできます。
TextBuf は、TTextRec レコード内の Buffer エントリの型で、使用中のバッファのサイズを表します。
メモ: Delphi 言語用のテキスト ファイル デバイス ドライバを記述することに精通していない場合は、これを使用しないでください。 |
Read
| procedure Read(var F: File; V1; [ ..., VN]); |
Read は、ファイルからデータを読み込みます。
Read プロシージャは、Delphi コード内で次のように使用できます。
種類を指定したファイルの場合、1 つのファイル コンポーネントを 1 つの変数に読み込みます。
テキスト ファイルの場合、1 つ以上の値を 1 つ以上の変数に読み込みます。
ここで示す Read 構文は、このプロシージャで指定できる引数の数が可変であることを示します。
Read は、次の行末マーカー(ただしそれ自体は含まない)まで、または Eof(F) が true になるまですべての文字を読み込みます。読み込んだ後、次の行へスキップはしません。読み込みんだ文字列が文字列変数の最大長より長ければ、切り捨てられます。
最初の Read の後、次の Read では行末マーカーを確認し、長さゼロの文字列が返されます。
複数の Readln 呼び出しを行って、連続する文字列値を読み込みます。
拡張構文が有効であれば、Read では、null で終わる文字列をゼロを起点とする文字配列に読み込むことができます。
Read は、ファイルから一文字読み込み、それを変数に割り当てます。CRLF モードが有効で、Read 実行前に Eof(F) が true だった場合は、Chr(26)(Ctrl+Z 文字)の値が変数に割り当てられます。(CRLF モードを有効にするには、SetLineBreakStyle を使用します。)
Read は、数値文字列の先頭部分にある空白、タブ、行末マーカーはスキップします。
数値文字列が期待された形式に適合しない場合は I/O エラーとなり、適合すれば値が変数に割り当てられます。
次の Read は、数値文字列を終了させた空白、タブ、行末マーカーで始まります。 |
Readln
|
procedure Readln(var F: File; [ ..., VN]);
procedure Readln(var F: File; [ ..., VN]); |
ファイルからテキストを 1 行読み込みます。
Delphi コード内で、ReadLn プロシージャはテキストを 1 行読み込んで、ファイル内の次の行にスキップします。
ここで示す ReadLn 構文は、このプロシージャで指定できる引数の数が可変であることを示します。
ReadLn(F) にパラメータを指定しないと、現在のファイル位置は、次の行があれば、その先頭へと進められます。次の行がなければ、ファイルの終わりに移動します。
F を省略すると、グローバル変数 Input が使用され、プロセス標準入力ファイルにアクセスします。GUI アプリケーションで Input を使用すると、特殊な問題が発生します。
メモ: {$I+} は、例外を使用して、実行時エラーを処理します。{$I-} を使用すると、IOResult を使用して I/O エラーをチェックします。 |
Rename | procedure Rename(var F: File; Newname: String); |
外部ファイルの名前を変更します。
F に関連付けられた外部ファイルの名前は Newname に変更されます。さらに F を操作すると,新しい名前の外部ファイルに操作の内容が反映されます。
F は任意のファイル型を表す変数です。Newname は文字列型の式です。ただし,拡張構文が使用可能な場合には PChar 型の式になります。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
Reset
|
procedure Reset(var F: File; [ RecSize: Integer]);
procedure Reset(var F: File; [ RecSize: Integer]); |
Delphi のコードでは,Reset プロシージャは,F に指定された名前の既存の外部ファイルを,グローバルな FileMode 変数で指定されたモードを使って開きます。指定された名前の外部ファイルが存在しない場合,または現在のファイルモードでファイルを開けない場合には,エラーが発生します。F がすでに開かれている場合には,いったん閉じてから再び開かれます。現在のファイル位置はファイルの先頭に設定されます。
警告: FileMode のデフォルト値は 2(読み書きアクセス)です。Reset を呼び出す前に読み出し専用ファイルモードに変更しないと,読み出し専用ファイルを開くことはできません。
F は,AssignFile で外部ファイルに関連付けられたファイル型を表す変数です。RecSize はオプションの式で,F が型なしファイルの場合にのみ指定できます。F が型なしファイルの場合,RecSize はデータ転送に使用されるレコードサイズを指定します。RecSize を省略すると,レコードサイズはデフォルトの 128 バイトになります。
F に空の名前を指定すると(AssignFile(F,) など),Reset の呼び出し後に F は標準の入力ファイルを参照します。
F がテキストファイルの場合,F は読み出し専用になります。
Reset を呼び出した後,ファイルが空の場合には Eof(F) は true になり,それ以外の場合には false になります。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
FileMode
FileMode: Byte = 2; { Standard mode for opening files }
Reset 手続きで開かれた型付きファイルや型なしファイルのアクセス モードを示します。
Delphi コードでは、Reset 手続きを使って型付きファイルや型なしファイル(テキスト ファイルは対象外)を開くときに使用されるアクセス モードは FileMode で決まります。
FileMode 変数に割り当てられるファイル オープン モードは、System.SysUtils 上の Constants リストで定義されています。 デフォルトの FileMode は 2(読み書きアクセス)です。 FileMode に別の値を割り当てると、それ以降のすべての Reset 呼び出しでそのモードが使用されます。
次の表は、利用可能な FileMode 値を示しています:
FileMode 値 | バイト値 |
fmExclusive | 4 |
fmOpenRead | 0 |
fmOpenReadWrite | 2 |
fmOpenWrite | 1 |
fmShareCompat | 0 |
fmShareDenyNone | 64 |
fmShareDenyRead | 48 |
fmShareDenyWrite | 32 |
fmShareExclusive | 16 |
メモ: 読み取り専用ファイルに対して Reset を呼び出す場合は、その前に必ず FileMode をリセットしてください。 ファイルから読み取るだけであったとしても、デフォルトの FileMode 値(読み書きアクセス)では読み取り専用ファイルを開くことができません。
警告: FileMode は、スレッドローカル変数ではなく変数として宣言されています。 そのため、この変数はスレッドセーフではありません。 |
Rewrite
|
procedure Rewrite(var F: File; [ RecSize: Integer]);
procedure Rewrite(var F: File; [ RecSize: Integer]); |
新しいファイルを作成して開きます。
Delphi のコードでは,Rewrite プロシージャは,F に指定された名前で新しい外部ファイルを作成します。
F は,AssignFile で外部ファイルに関連付けられたファイル型を表す変数です。RecSize はオプションの式で,F が型なしファイルの場合にのみ指定できます。F が型なしファイルの場合,RecSize はデータ転送に使用されるレコードサイズを指定します。RecSize を省略すると,レコードサイズはデフォルトの 128 バイトになります。
同じ名前の外部ファイルがすでに存在する場合,そのファイルは削除され,かわりに新しい空のファイルが作成されます。
F がすでに開かれている場合には,いったん閉じてから再作成されます。現在のファイル位置は空のファイルの先頭に設定されます。
F に空の名前を指定すると(AssignFile(F,) など),Rewrite の呼び出し後に F は標準の出力ファイルを参照します。
F がテキストファイルの場合,F は書き込み専用になります。
Rewrite の呼び出し後には,Eof(F) は常に true になります。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
Seek
| procedure Seek(var F: File; N: Longint); |
現在のファイルポインタを指定の位置に移動します。
Delphi のコードでは,Seek プロシージャを使用すると,開いている型付きファイルまたは型なしファイル内で指定した位置に移動できます。F の現在のファイルポインタは先頭から N の位置に移動します。ファイルの先頭は 0 です。
上記の構文では,F は型付きファイルまたは型なしファイルの変数です。F で指定されるファイルは開かれている必要があります。N は Longint 型の式です。
ファイルを拡張するには,N にファイルサイズよりも大きな値を指定します。つまり,Seek(F,FileSize(F) + n) という文を記述して,現在のファイルポインタをファイルの末尾より後ろに移動します。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
SeekEof
|
function SeekEof([var F: Text]): Boolean;
function SeekEof([var F: Text]): Boolean; |
ファイルのファイル終了ステータスを返します(ホワイトスペースは無視)。
Delphi のコードでは,SeekEof 関数を呼び出すと,ファイルポインタとファイルの終わりの間にあるのがホワイトスペースだけかどうかを確認できます。SeekEof は,ファイルポインタをホワイトスペースより後ろに移動し,ファイルの終わりか,ホワイトスペース以外の文字のどちらか先にある方に配置します。ファイルポインタをファイルの終わりに配置する場合,SeekEof は true を返します。そうでない場合は false を返します。
SeekEof は,テキストファイルに対してのみ使用できます。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
SeekEoln
|
function SeekEoln([var F: Text]): Boolean;
function SeekEoln([var F: Text]): Boolean; |
ファイルの行末ステータスを返します(ホワイトスペースは無視)。
Delphi のコードでは,SeekEoln 関数を呼び出すと,ファイルポインタと現在の行の終わりの間にあるのがホワイトスペースだけかどうかを確認できます。SeekEoln は,ファイルポインタをホワイトスペースより後ろに移動し,現在の行の終わり,ファイルの終わり,またはホワイトスペース以外の文字のいずれか先にある方に配置します。ファイルポインタを現在の行の終わりかファイルの終わりに配置する場合,SeekEoln は true を返します。そうでない場合は false を返します。
SeekEoln は,テキストファイルに対してのみ使用できます。ファイルはオープンされていなければなりません。
メモ: {$I+} は,例外を使って実行時エラーを処理します。{$I-} を使用する場合,IOResult で入出力エラーの有無をチェックする必要があります。 |
SetLineBreakStyle
|
procedure SetLineBreakStyle(var T: Text;
Style: TTextLineBreakStyle); |
テキストファイル I/O 用の行の終わりおよびファイルの終わりの形式を指定します。
Delphi では,SetLineBreakStyle を呼び出すと,テキストファイルルーチンが行およびファイルの終わりを見つけたりマークする方法を指定できます。影響を受けるルーチンには,Read,Write,ReadLn,WriteLn,Eof,Eoln,SeekEof,および SeekEoln があります。
T は,変更する行区切りスタイルを持つテキストファイルです。ファイルが閉じていないと,SetLineBreakStyle は実行時エラーを生成します。
Style は使用するスタイルを示します。Style が tlbsLF の場合,行の終わりは改行文字だけを使ってマークされます。Style が tlbsCRLF の場合,行の終わりは復帰および改行文字を使ってマークされます。 |
SetTextBuf
|
procedure SetTextBuf(var F: Text; var Buf;
[ Size: Integer]);
procedure SetTextBuf(var F: Text; var Buf;
[ Size: Integer]); |
入出力バッファをテキストファイルに割り当てます。
Delphi のコードでは,SetTextBuf プロシージャは,テキストファイル F が,内部バッファではなく Buf で指定したバッファを使用するように変更します。F はテキストファイル変数,Buf は任意の変数,Size はオプションの式です。
テキストファイル変数には,Read 操作と Write 操作のバッファ用にそれぞれ 128 バイトの内部バッファがあります。ほとんどの操作はこのバッファで十分です。ただし,大量の入出力があるプログラムでは,より大きいバッファの方がディスクヘッドの動きやファイルシステムのオーバーヘッドを減らすことができて便利です。
Size は,バッファのサイズをバイトで指定します。Size を省略した場合,バッファサイズは SizeOf(Buf) になります。新しいバッファは,F が次に AssignFile に渡されるまで有効です。
SetTextBuf は,Reset,Rewrite,Append の直後に呼び出せますが,開いているファイルに対しては使用できません。
いったん入出力操作をしたすでに開いているファイルに対して SetTextBuf を呼び出すと,バッファの変更によってデータを失うことがあります。
Delphi のランタイムライブラリは,ファイルに対する入出力操作の間,バッファが常に存在していることを確認しません。よくあるエラーには,ローカル変数をバッファとして割り当てた後に,そのバッファを宣言した手続きの外でファイルを使用するエラーがあります。 |
SetTextCodePage
|
procedure SetTextCodePage(var T: Text;
CodePage: Word); |
テキスト ファイルのコード ページを設定します。
SetTextCodePage は、TTextRec 変数の CodePage フィールドを設定します。 |
Write
|
procedure Write([var F: File]; P1; [ ..., PN]);
procedure Write([var F: File]; P1; [ ..., PN]); |
型付きファイルまたはテキスト ファイルにデータを書き込みます。
ここで示す Write 手続きの構文は、Write で指定できる引数の数が可変であることを示しています。
型付きファイルの Write 手続き
Delphi コードでは、Write により、ファイルをファイル コンポーネントに書き込みます。F はファイル変数、V はそれぞれ F のコンポーネント型と同じ型の変数です。変数が 1 つ書き込まれるたびに、現在のファイル ポインタの位置は次のコンポーネントに進みます。現在のファイル ポインタの位置がファイルの末尾になると(つまり Eof(F) が True であれば)、ファイルは拡張されます。
テキスト ファイルの Write 手続き
Delphi コードでは、Write により、1 つ以上の値をテキスト ファイルに書き込みます。F が指定されている場合は、テキスト ファイル変数です。F が指定されていない場合は、標準ファイル変数 Output が指定されていると見なされます。P はそれぞれ、書き込みパラメータです。各書き込みパラメータには、出力式が含まれ、その値がファイルに書き込まれます。書き込みパラメータには、フィールド幅と小数点以下の桁数の指定も含めることができます。各出力式は、Char 型、整数型(Byte、Shortint、Word、Longint、Cardinal)、浮動小数点型(Single、Real、Double、Extended、Currency)、文字列型(PChar、AnsiString、ShortString)、パック文字列、論理型(Boolean、Bool)のいずれかでなければなりません。
書き込みパラメータの形式は次のとおりです。
OutExpr [: MinWidth [: DecPlaces ] ] |
OutExpr は出力式です。
MinWidth と DecPlaces は整数型の式です。
・MinWidth には、最小のフィールド幅を指定します。0 より大きくなければなりません。書き込まれる文字数はちょうど MinWidth 個(必要に応じて左側が空白で埋められます)ですが、OutExpr の値が MinWidth より多い文字数で表さなければならないものである場合は別です。その場合には、OutExpr の値を表すのに必要な文字数が書き込まれます。同様に、MinWidth が省略された場合も、OutExpr の値を表すのに必要な文字数が書き込まれます。
・DecPlaces には、いずれかの実数型の固定小数点表現における小数点以下の桁数を指定します。これを指定できるのは、OutExpr がいずれかの実数型で、かつ、MinWidth も指定されている場合に限られます。MinWidth を指定する場合は、0 以上でなければなりません。
文字型値の書き込み: MinWidth を省略すると、OutExpr の文字値がファイルに書き込まれます。指定した場合は、MinWidth - 1 個の空白の後に OutExpr の文字値が書き込まれます。
いずれかの整数型値の書き込み: MinWidth を省略すると、OutExpr の 10 進表現がファイルに書き込まれます。左側に空白は付きません。MinWidth が指定され、その値が 10 進文字列の長さより大きい場合は、その 10 進文字列の前に必要なだけの空白が書き込まれ、フィールド幅が MinWidth になります。
いずれかの実数型値の書き込み: OutExpr の値がいずれかの実数型である場合、その 10 進表現がファイルに書き込まれます。表現形式は、DecPlaces の有無によって異なります。DecPlaces が省略されると(または、あっても値が負なら)、浮動小数点 10 進文字列が書き込まれます。MinWidth も省略されている場合には、MinWidth はデフォルトの 17 と見なされます。指定があっても、MinWidth が 8 未満なら、8 と見なされます。浮動小数点文字列の形式は次のとおりです。
[ | - ] <digit> . <decimals> E [ + | - ] <exponent> |
次の表に、出力文字列の構成要素を示します。
構成要素 | 意味 |
[ | - ] | OutExpr の符号に応じて " "(空白)または "-"(ハイフン) |
<digit> | 1 桁の数字。OutExpr が 0 の場合に限り "0" |
<decimals> | MinWidth-7(最大 10)桁の数字の文字列 |
E | 大文字の E |
[ + | - ] | 指数の符号に応じて指定 |
<exponent> | 2 桁の 10 進指数 |
DecPlaces の指定があると、固定小数点 10 進文字列が書き込まれます。DecPlaces が 216 より大きい場合は 216 と見なされます。固定小数点文字列の形式は次のとおりです。
[<blanks>] [ - ] <digits> [.<decimals>] |
メモ: 実数型の実際の精度は 216 桁より小さくなります。Double 型は 10 進で約 16 桁、Single 型は 10 進で約 8 桁です。Delphi RTL では、精度の残りのフィールドを '0' 文字で埋めます。たとえば次のようなコードを実行すると、
次のように表示されます。
次の表に、固定小数点文字列の構成要素を示します。
構成要素 | 意味 |
[<blanks>] | MinWidth を満足させる空白数 |
[-] | OutExpr が負の場合 |
<digits> | 少なくとも 1 桁、先頭にゼロはつけません |
[.<decimals>] | DecPlaces が 0 より大きいときの小数点以下桁数 |
いずれかの文字列型値の書き込み: MinWidth を省略すると、OutExpr の文字列値がファイルに書き込まれます。左側に空白は付きません。MinWidth が指定され、その値が OutExpr の長さより大きい場合は、その 10 進文字列の前に必要なだけの空白が書き込まれ、フィールド幅が MinWidth になります。
パック文字列型値の書き込み: OutExpr がパック文字列型の場合、長さがパック文字列型要素の数となる文字列の書き出しと同じ効果です。
いずれかの論理型値の書き込み: OutExpr が論理型の場合、OutExpr の値に応じて True または False という文字列の書き出しと同じ効果です。
メモ: Write を使用する場合は、ファイルは出力用に開く必要があります。 |
Writeln
|
procedure Writeln([var F: File]; [ P1; [ ..., PN] ]);
procedure Writeln([var F: File]; [ P1; [ ..., PN] ]);
procedure Writeln([var F: File]; [ P1; [ ..., PN] ]); |
テキスト ファイルに書き出し、行末マーカーを追加します。
WriteLn は、テキスト ファイル用に定義された Write プロシージャを拡張したものです。
ここで示す WriteLn プロシージャの構文は、WriteLn で指定できる引数の数が可変であることを示します。
Write を実行した後、WriteLn は、行末マーカー(行送りまたは復帰/改行)をファイルに書き出します。
F を省略すると、グローバル変数 Output が使用され、プロセス標準出力ファイルにアクセスします。GUI アプリケーションで Output を使用すると、特殊な問題が発生します。 |
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/06/19
2014/06/23
▼2014/06/24
シェアウェア
Script!World
データベース
|