FileRead

ファイルの内容を取得します。

Text := FileRead(Filename , Options)

パラメータ

Filename

型:文字列

絶対パスが指定されていない場合は、A_WorkingDirにあると仮定されます。

Options

型:文字列

以下の文字列のうち、0個以上。各オプションと次のオプションは、1つのスペースまたはタブで区切ってください。事例:"`n m5000 UTF-8"

Encoding: Specify any of the encoding names accepted by FileEncoding (excluding the empty string) to use that encoding if the file lacks a UTF-8 or UTF-16 byte order mark. 省略された場合、デフォルトはA_FileEncodingとなる。

RAW: Specify the word RAW (case-insensitive) to read the file's content as raw binary data and return a Buffer object instead of a string. このオプションは、以前に指定されたエンコーディングを上書きし、その逆もまた然りです。

m1024: If this option is omitted, the entire file is loaded unless there is insufficient memory, in which case an error message is shown and the thread exits (but Try can be used to avoid this). それ以外の場合は、1024を10進数または16進数のバイト数に置き換えてください。これより大きなファイルの場合は、その先頭部分のみを読み込みます。

Note: This might result in the last line ending in a naked carriage return (`r) rather than `r`n.

`n(改行文字):キャリッジリターンとラインフィード(`r`n)をラインフィード(`n)に置き換える。しかし、この翻訳はパフォーマンスを低下させるので、通常は必要ありません。例えば、`r`nを含むテキストは、Gui Editコントロールに追加するのに適したフォーマットになっています。以下の解析ループは、各行の末尾が `r`n であろうと `n だけであろうと、正しく動作します:Loop Parse, MyFileContents, "`n", "`r".

戻り値

型:文字列またはオブジェクト

説明: 指定されたファイルの内容を返します。The return value is a Buffer object if the RAW option is in effect and the file can be opened; otherwise, it is a string. ファイルが存在しないか、その他の理由でオープンできない場合は、空文字列が返されます。

エラー処理

ファイルのオープンや読み取りに問題があった場合、OSErrorがスローされます。

A file greater than 4 GB in size will cause a MemoryError to be thrown unless the *m option is present, in which case the leading part of the file is loaded. また、要求されたデータ量を格納するのに十分なメモリをプログラムが割り当てられない場合、MemoryErrorがスローされます。

A_LastErrorには、オペレーティングシステムのGetLastError()関数の結果が設定されます。

バイナリデータの読み取り

RAWオプションを使用した場合、戻り値は、ファイルの未修正の内容を含むBufferオブジェクトとなる。オブジェクトのSizeプロパティは、読み込んだバイト数を返します。NumGetまたはStrGetを使用して、バッファからデータを取得することができます。事例:

buf := FileRead(A_AhkPath, "RAW")
if StrGet(buf, 2, "cp0") == "MZ"  ; 実行ファイルのように見えるが...。
{
    ; COFF ファイルのヘッダーからマシンタイプを読み込みます。
    machine := NumGet(buf, NumGet(buf, 0x3C, "uint") + 4, "ushort")
    machine := machine=0x8664 ? "x64" : machine=0x014C ? "x86" : "unknown"
    ; マシンの種類とファイルサイズを表示します。
    MsgBox "This " machine " executable is " buf.Size " bytes."
}
buf := ""

なぜなら、デフォルトでは、ファイルから読み込まれたバイトはテキストとして解釈され、ソースファイルのエンコーディング(オプションまたはA_FileEncodingで指定)からスクリプトのネイティブエンコーディングであるUTF-16に変換されることがあるからです。データがUTF-16テキストでない場合、この変換は一般的に望ましくない方法でデータを変更します。

RAWオプションの他のデモについては、ClipboardAllの例 #2を参照してください。

最後に、FileOpenFile.RawReadまたはFile.ReadNumを使用すると、最初にファイル全体をメモリに読み込まずにバイナリデータを読み込むことができます。

備考

ファイルの全部または大部分をメモリに読み込むことを目的とする場合、FileReadはファイル読み込みループを使用するよりもはるかに優れた性能を発揮します。

メモリの使いすぎが懸念される場合は、FileGetSizeで事前にファイルサイズを確認してください。

FileOpenは、ファイル全体をメモリに読み込むことなく、ファイルの特定の位置でデータを読み書きするなど、FileReadより高度な機能を提供します。機能一覧は、「ファイルオブジェクト」を参照してください。

FileEncoding, FileOpen/File Object, file-reading loop, FileGetSize, FileAppend, IniRead, Sort, Download

テキストファイルをMyTextに読み込みます。

MyText := FileRead("C:\My Documents\My File.txt")

ファイルの中身を素早くソートします。

Contents := FileRead("C:\Address List.txt")
Contents := Sort(Contents)
FileDelete "C:\Address List (alphabetical).txt"
FileAppend Contents, "C:\Address List (alphabetical).txt"
Contents := "" ; メモリを解放します。