读取一个文件的内容给一个 变量 。
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 设为 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日