FileRead

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

Text := FileRead(Filename , Options)

パラメータ

Filename

型:文字列

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

Options

型:文字列

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

エンコード:FileEncodingが受け付けるエンコーディング名(空文字列を除く)を指定すると、ファイルに UTF-8 または UTF-16 のバイト順マークがない場合に、そのエンコーディングを使用します。省略された場合、デフォルトはA_FileEncodingとなる。

RAW:RAW(大文字と小文字を区別しない)を指定すると、ファイルの内容を生のバイナリデータとして読み込み、文字列の代わりにBufferオブジェクトを返します。このオプションは、以前に指定されたエンコーディングを上書きし、その逆もまた然りです。

m1024:このオプションを省略すると、メモリ不足でない限りファイル全体が読み込まれ、その場合はエラーメッセージが表示されてスレッドが終了します(ただし、Tryを使用することでこれを回避できます)。それ以外の場合は、1024を10進数または16進数のバイト数に置き換えてください。これより大きなファイルの場合は、その先頭部分のみを読み込みます。

注意:その結果、最終行の末尾が `r`n ではなく、裸のキャリッジリターン(`r)になってしまうかもしれません。

`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がスローされます。

4GBを超えるサイズのファイルは、*mオプションが存在しない限り、MemoryErrorが発生し、この場合、ファイルの先頭部分が読み込まれる。また、要求されたデータ量を格納するのに十分なメモリをプログラムが割り当てられない場合、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より高度な機能を提供します。機能一覧は、「ファイルオブジェクト」を参照してください。

FileEncodingFileOpen/Fileオブジェクトファイル読み込みループFileGetSizeFileAppendIniReadSortDownload

テキストファイルを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 := "" ; メモリを解放します。