# FileRead

读取一个文件的内容给一个 变量 。

FileRead, OutputVar, Filename

#### 参数

OutputVar | 用来存储获取的数据的 变量 名称。如果遇上一个例如文件正在“使用”或不存在的问题，OutputVar 将被设为空(这种情况下 ErrorLevel 被设为 1)。如果 Filename 是一个空白文件，它也将被设为空(这种情况下 ErrorLevel 被设为 0)。
Filename | 要读取的文件名称，如果绝对路径未指定将被假设在 %A_WorkingDir%。 选项: 零个或多个下列字串也可以直接在文件名称前面提供。将每个选项和其下一个用单个空格或 tab 分隔开来。例如：*t *m5000 C:\Log Files\200601.txt *c: 读取一个保存了 ClipboardAll 的文件。当 *c 提供后，所有其他选项将被忽略。 *m1024 [v1.0.43.03+]: 如果此选项被省略，将读取整个文件除非它大于 1 GB，这种情况下它将根本不会被读取。否则要读取部分的话，将字节在 1 到 1073741824 (1 GB)之间的十进制或十六进制数字来替换掉 1024。如果文件大于 1 GB，将仅仅读取它的前面部分。注意：此选项可能导致在最后一行以一个光秃秃的回车(`r)而不是 `r`n 来结束。 *t: 用换行(`n)替换出现的部分/全部回车和换行(`r`n)。不过，这种转换减低了性能并且往往不必要。例如，包含 `r`n 的文本已经是用来添加到一个图形编辑控件的正确的格式。类似地，FileAppend 在它打开一个新文件时探测到 `r`n 的存在；它知道将 `r`n 以现状写入而不是将其转换为 `r`r`n。最后，后面例子中的解析循环将正确地运转而不管每行是否以 `r`n 或者仅以 `n 结尾：Loop, parse, MyFileContents, `n, `r

#### ErrorLevel

如果读取成功 ErrorLevel 设为 0。如果遇到问题它将被设为 1，例如：1) 文件不存在；2) 文件被锁定或无法访问；3) 操作系统缺乏足够的记忆存储来读取文件。

#### 注意

当要读取一个文件的大部分或所有内容到记忆存储中时，FileRead 比使用file-reading loop (文件读取循环) 执行地更好。

一个文件的大小超过 1 GB 将导致 ErrorLevel 被设为 1 并且 OutputVar 成为空，除非提供 *m 选项，这种情况下读取文件的前面部分。

FileRead 不服从 #MaxMem 命令。如果担心使用了太多的记忆存储，预先用 FileGetSize 来检查文件的大小。

如果指定的文件包含了任何二进制零(它决不会出现在一个正确的文本文件中)，那么仅仅在二进制零前面的文本会被 AutoHotkey 命令和函数“看到”。不过，整个内容仍然提交给 OutputVar 并且能被高级的方法访问像 NumGet() 和 地址运算符(&) ；例如：*(&OutputVar + 1000)

和 file-reading loops ，FileReadLine 不同，FileRead 并不认为字符 Control-Z (0x1A) 是文件的结尾的标志。所以对于任何的 Control-Z，即使出现在文件的最末尾，也会被照常读入。

FileRead 能被用来快速地整理一个文件的内容像下面的例子那样：

    FileRead, Contents, C:\Address List.txt
    if not ErrorLevel  ;成功载入。
    {
        Sort, Contents
        FileDelete, C:\Address List (alphabetical).txt
        FileAppend, %Contents%, C:\Address List (alphabetical).txt
        Contents =  ;释放记忆存储。
    }

#### 相关命令

file-reading loop, FileReadLine, FileGetSize, FileAppend, IniRead, Sort, UrlDownloadToFile

#### 示例

    FileRead, OutputVar, C:\My Documents\My File.txt

翻译：天堂之门 menk33@163.com 2008年11月8日