メインコンテンツまでスキップ
バージョン: v19 R7 BETA

FileHandle

FileHandle クラスは、開かれた File オブジェクトから内容を順次読み出したり、追加したりするための関数を備えています。 FileHandle は、ドキュメントのどの部分にもアクセスすることができます。

FileHandle オブジェクトは file.open() 関数によって作成されます。

ドキュメント全体を一括で読み書きするには、file.getText()file.setText() 関数の使用を検討されるとよいでしょう。

標準的な 4Dオブジェクトの 参照カウント により、FileHandle は参照されなくなると自動的に削除され、要求された File オブジェクトも自動的に閉じられます。 つまり、FileHandle を使えば、ドキュメントを閉じる必要がなくなります。

例題

var $f : 4D.File
var $fhandle : 4D.FileHandle
$f:=Folder(Database folder).file("example.txt")

// 先頭から 1行ずつ書き込みます
$fhandle:=$f.open("write")
$text:="Hello World"
For ($line; 1; 4)
$fhandle.writeLine($text+String($line))
End for

// 終端から 1行ずつ追加で書き込みます
$fhandle:=$f.open("append")
$text:="Hello New World!"
For ($line; 1; 4)
$fhandle.writeLine($text+String($line))
End for

// オブジェクト引数を使い、読み取り停止文字を指定して読み取ります
$o:=New object()
$o.mode:="read"
$o.charset:="UTF-8"
$o.breakModeRead:=Document with CRLF
$stopChar:="!"
$fhandle:=$f.open($o)
$text:=$fhandle.readText($stopChar)

// 1行ずつ読み取ります
$lines:=New collection
$fhandle:=$f.open("read")
While (Not($fhandle.eof))
$lines.push($fhandle.readLine())
End while

FileHandle オブジェクト

FileHandle オブジェクトは共有できません。

.breakModeRead : Text    ファイル読み取り時に使用される改行の処理モードを返します
.breakModeWrite : Text    ファイル書き込み時に使用される改行の処理モードを返します
.charset : Text    ファイルの読み取りや書き込みに使用される文字セットを返します
.eof : Boolean    offset がファイルの終端に達した場合に true、それ以外は false を返します
.getSize() : Real     ドキュメントの現在のサイズをバイト単位で返します
.mode : Text    FileHandle が作成されたモード ("read"、"write"、"append" のいずれか) を返します
.offset : Real    データストリームの現在のオフセット (ドキュメント内の位置) を返します
.readBlob( bytes : Real ) : [4D.Blob](BlobClass)    ファイルの現在の位置から bytes サイズの Blob を返します
.readLine() : Text     現在の位置から次の改行文字まで、あるいはドキュメントの終端に到達するまでのテキストを返します
.readText( { stopChar : Text } ) : Text     現在の位置から、最初の stopChar 文字列まで (渡された場合)、あるいはファイルの終端に達するまでのテキストを返します
.setSize( size : Real )    ドキュメントの新しいサイズをバイト単位で設定します
.writeBlob( blob : 4D.Blob )     ファイルの現在の位置から blob に渡した Blob を書き込みます
.writeLine( lineOfText : Text )     現在の位置に lineOfText の内容を書き込み、改行文字を挿入します
.writeText( textToWrite : Text )    現在の位置に textToWrite の内容を書き込み、改行文字は挿入しません

.breakModeRead

履歴
バージョン内容
v19 R7追加

.breakModeRead : Text

説明

.breakModeRead プロパティは、 ファイル読み取り時に使用される改行の処理モードを返します。

.breakModeRead プロパティは、FileHandle 作成時に file.open() 関数で定義できます (詳細については .open() 関数 を参照ください)。 デフォルトは "native" です。

.breakModeRead プロパティは、.open() のオプションが数値 (定数) を使って設定されていたとしても、常にテキスト値を格納します。

このプロパティは 読み取り専用 です。

.breakModeWrite

履歴
バージョン内容
v19 R7追加

.breakModeWrite : Text

説明

.breakModeWrite プロパティは、 ファイル書き込み時に使用される改行の処理モードを返します。

.breakModeWrite プロパティは、FileHandle 作成時に file.open() 関数で定義できます (詳細については .open() 関数 を参照ください)。 デフォルトは "native" です。

.breakModeWrite プロパティは、.open() のオプションが数値 (定数) を使って設定されていたとしても、常にテキスト値を格納します。

このプロパティは 読み取り専用 です。

.charset

履歴
バージョン内容
v19 R7追加

.charset : Text

説明

.charset プロパティは、 ファイルの読み取りや書き込みに使用される文字セットを返します。

文字セットは、FileHandle 作成時に file.open() 関数で定義できます。 デフォルト値: "UTF-8"

このプロパティは 読み取り専用 です。

.eof

履歴
バージョン内容
v19 R7追加

.eof : Boolean

説明

.eof プロパティは、 offset がファイルの終端に達した場合に true、それ以外は false を返します。

このプロパティは 読み取り専用 です。

.getSize()

履歴
バージョン内容
v19 R7追加

.getSize() : Real

引数タイプ説明
戻り値Real<-ドキュメントのサイズ (バイト単位)

|

説明

.getSize() 関数は、 ドキュメントの現在のサイズをバイト単位で返します。

この関数は、File クラスの .size プロパティと同じ値を返します。

参照

.setSize(), file.size

.mode

履歴
バージョン内容
v19 R7追加

.mode : Text

説明

.mode プロパティは、 FileHandle が作成されたモード ("read"、"write"、"append" のいずれか) を返します。

モードは、FileHandle 作成時に file.open() 関数で定義できます。 デフォルトは "read" です。

このプロパティは 読み取り専用 です。

.offset

履歴
バージョン内容
v19 R7追加

.offset : Real

説明

.offset プロパティは、 データストリームの現在のオフセット (ドキュメント内の位置) を返します。 オフセット値は、読み取りおよび書き込み操作の後に自動的に更新されます。

.offset を設定すると、その現在値が変更されます。

  • 負の値が渡された場合、.offset はファイルの先頭 (ゼロ) に設定されます。
  • ファイルサイズより大きい値が渡された場合、.offset はファイルの終端 (ファイルサイズ) に設定されます。

読み書き可能 プロパティです。

.readBlob()

履歴
バージョン内容
v19 R7追加

.readBlob( bytes : Real ) : 4D.Blob

引数タイプ説明
bytesReal->読み取るバイト数
戻り値4D.Blob<-ファイルから読み取ったバイト

|

説明

.readBlob() 関数は、 ファイルの現在の位置から bytes サイズの Blob を返します 。

この関数を実行すると、現在の位置 (.offset) が、最後に読み取ったバイトの後に更新されます。

参照

.writeBlob()

.readLine()

履歴
バージョン内容
v19 R7追加

.readLine() : Text

引数タイプ説明
戻り値Text<-1行のテキスト

|

説明

.readLine() 関数は、 現在の位置から次の改行文字まで、あるいはドキュメントの終端に到達するまでのテキストを返します。

この関数を実行すると、現在の位置 (.offset) が更新されます。

この関数が FileHandle を対象に初めて実行されると、ドキュメント全体がバッファーに読み込まれます。

参照

.readText(), .writeLine()

.readText()

履歴
バージョン内容
v19 R7追加

.readText( { stopChar : Text } ) : Text

引数タイプ説明
stopCharText->読み取りを停止する文字
戻り値Text<-ファイルのテキスト

|

説明

.readText() 関数は、 現在の位置から、最初の stopChar 文字列まで (渡された場合)、あるいはファイルの終端に達するまでのテキストを返します。

この関数は、元の改行文字をすべて置き換えます。 デフォルトではネイティブの改行文字が使用されますが、FileHandle を開く際に、.breakModeRead プロパティを設定することで、別の改行文字を定義することができます。

stopChar の文字列は、返されるテキストに含まれません。 stopChar を省略した場合、ドキュメント全体のテキストが返されます。

この関数を実行すると、.offsetstopChar 文字列の直後に移動します。

渡した stopChar が見つからない場合、.readText() は空の文字列を返し、.offset は更新されません。

この関数が FileHandle を対象に初めて実行されると、ドキュメント全体がバッファーに読み込まれます。

参照

.readLine(), .writeText()

.setSize()

履歴
バージョン内容
v19 R7追加

.setSize( size : Real )

引数タイプ説明
sizeReal->ドキュメントの新しいサイズ (バイト単位)

|

説明

.setSize() 関数は、 ドキュメントの新しいサイズをバイト単位で設定します。

size の値が現在のドキュメントサイズより小さい場合、内容は先頭から切り捨てられ、新しい size が取得されます。

参照

.getSize(), file.size

.writeBlob()

履歴
バージョン内容
v19 R7追加

.writeBlob( blob : 4D.Blob )

引数タイプ説明
blob4D.Blob->ファイルに書き込む Blob

|

説明

.writeBlob() 関数は、 ファイルの現在の位置から blob に渡した Blob を書き込みます 。

この関数を実行すると、現在の位置 (.offset) が、最後に書き込んだバイトの後に更新されます。

参照

.readBlob()

.writeLine()

履歴
バージョン内容
v19 R7追加

.writeLine( lineOfText : Text )

引数タイプ説明
lineOfTextText->書き込むテキスト

|

説明

.writeLine() 関数は、 現在の位置に lineOfText の内容を書き込み、改行文字を挿入します (.writeText() 関数とは異なります)。 デフォルトではネイティブの改行文字が使用されますが、FileHandle を開く際に、.breakModeWrite プロパティを設定することで、別の改行文字を定義することができます。

この関数を実行すると、現在の位置 (.offset) が、最後に書き込んだ改行文字の後に更新されます。

参照

.breakModeWrite, .readLine(), .writeText()

.writeText()

履歴
バージョン内容
v19 R7追加

.writeText( textToWrite : Text )

引数タイプ説明
textToWriteText->書き込むテキスト

|

説明

.writeText() 関数は、 現在の位置に textToWrite の内容を書き込み、改行文字は挿入しません (.writeLine() 関数とは異なります)。 この関数は、元の改行文字をすべて置き換えます。 デフォルトではネイティブの改行文字が使用されますが、FileHandle を開く際に、.breakModeWrite プロパティを設定することで、別の改行文字を定義することができます。

この関数を実行すると、現在の位置 (.offset) は、次の改行文字の後に更新されます。

参照

.breakModeWrite, .readText(), .writeLine()