FileAppend

テキストまたはバイナリデータをファイルの末尾に書き込みます(必要に応じて、最初にファイルを作成します)。

FileAppend Text , Filename, Options

パラメータ

Text

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

If blank or omitted, Filename will be created as an empty file (but if the file already exists, its modification time will be updated). Otherwise, specify the text or raw binary data to append to the file. テキストには改行文字(`n)を含めることができる。In addition, a single long line can be broken up into several shorter ones by means of a continuation section.

Bufferのようなオブジェクトを渡して、生のバイナリデータを付加することができる。ファイルを作成する場合、オプションで"UTF-8"または "UTF-16"を指定した場合のみ、BOM(Byte Order Mark)が書き込まれます。デフォルトのエンコーディングは無視され、Optionsに関係なく、オブジェクトが含むデータはそのまま書き込まれます。PtrプロパティとSizeプロパティを実装しているオブジェクトであれば、どのようなものでも使用可能です。

Filename

型:文字列

If omitted, the output file of the innermost enclosing file-reading loop will be used (if available). Otherwise, specify the name of the file to be appended, which is assumed to be in A_WorkingDir if an absolute path isn't specified. 保存先ディレクトリはすでに存在している必要があります。

Standard Output (stdout): Specifying an asterisk (*) for Filename causes Text to be sent to standard output (stdout). このようなテキストは、ファイルにリダイレクトしたり、別のEXEにパイプしたり、おしゃれなテキストエディターでキャプチャしたりすることができます。例えば、以下のようにコマンドプロンプトで入力した場合は有効です:

"%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script.ahk" >"Error Log.txt"

ただし、stdoutに送られたテキストは、起動したコマンドプロンプトには表示されません。これは、1)Ahk2Exe ConsoleAppディレクティブでスクリプトをコンパイルする、または2)スクリプトの出力を他のコマンドやプログラムにパイプすることで回避することができます。事例:

"%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script.ahk" |more
For /F "tokens=*" %L in ('""%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script .ahk""') do @Echo %L

Filenameにアスタリスク(**)を2つ指定すると、Textは標準エラーストリーム(stderr)に送信されます。

Options

型:文字列

以下の文字列のうち、0個以上。各オプションと次のオプションは、1つのスペースまたはタブで区切ってください。事例:"`n 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です(ただし、Textがオブジェクトの場合はバイトオーダーマークを書きません)。

RAW: Specify the word RAW (case-insensitive) to write the exact bytes contained by Text to the file as-is, without any conversion. このオプションは、以前に指定されたエンコーディングを上書きし、その逆もまた然りです。Textがオブジェクトでない場合、UTF-16文字列を使用するため、データサイズは常に2バイトの倍数となる。

`n(改行文字):キャリッジリターン(`r)がまだ存在しない場合、各ラインフィード(`n)の前に挿入されます。つまり、`nから`r`nに変換するのです。この翻訳は、通常、パフォーマンスに影響を与えません。このオプションを使用しない場合、Text内の行末は変更されません。

エラー処理

失敗したときはOSErrorをスローします。

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

備考

既存のファイルを上書きする場合は、FileAppendを使用する前にFileDeleteでファイルを削除してください。

テキストが追加された後、ターゲットファイルは自動的に閉じられます(FileAppendがファイルの読み書きのループ内でシングルパラメータモードで使用されている場合を除く)。

アペンドモードのFileOpenは、FileAppendよりも制御性が高く、毎回ファイルを開いて閉じるのではなく、開いたままにしておくことができます。追記モードでファイルを開いたら、file.Write(string)を使って文字列を追記します。ファイルオブジェクトは、RawWrite/RawReadまたはWriteNum/ReadNumによるバイナリI/Oもサポートしています。

FileEncoding, FileOpen/File Object, FileRead, file-reading loop, IniWrite, FileDelete, OutputDebug, continuation sections

必要に応じてファイルを作成し、1行を追加します。

FileAppend "Another line.`n", "C:\My Documents\Test.txt"

読みやすさと保守性を高めるために、続きのセクションを使用します。

FileAppend "
(
A line of text.
デフォルトでは、前の行とこの行の間のハードキャリッジリターン(Enter)がファイルに書き込まれます。
	この行はタブでインデントされています。デフォルトでは、このタブもファイルに書き込まれます。
)", A_Desktop "\My File.txt"

オペレーティングシステム内蔵のFTPコマンドを使用して、FTPアップロードを自動化する方法について説明します。

FTPCommandFile := A_ScriptDir "\FTPCommands.txt"
FTPLogFile := A_ScriptDir "\FTPLog.txt"
try FileDelete FTPCommandFile  ; 前回実行したプログラムが途中で終了してしまった場合。

FileAppend
(
"open host.domain.com
username
password
binary
cd htdocs
put " VarContainingNameOfTargetFile "
delete SomeOtherFile.htm
rename OldFileName.htm NewFileName.htm
ls -l
quit"
), FTPCommandFile

RunWait Format('{1} /c ftp.exe -s:"{2}" >"{3}"', A_ComSpec, FTPCommandFile, FTPLogFile)
FileDelete FTPCommandFile  ; セキュリティ上、削除してください。
Run FTPLogFile  ; ログを表示させて確認します。