Next: ファイルのロック, Previous: ファイルからの読み込み, Up: ファイル [Contents][Index]
関数append-to-file
とwrite-region
を使用することによってディスク上のファイルにバッファーのコンテンツやバッファーの一部を直接書き込むことができます。visitされているファイルに書き込むためにこれらの関数を使用しないでください。これによってvisitにたいするメカニズムが混乱するかもしれません。
この関数はカレントバッファー内でstartとendによるリージョンのコンテンツをファイルfilenameの終端に追加する。そのファイルが存在しなければ作成する。この関数はnil
をリターンする。
filenameの書き込みや作成ができなければエラーがシグナルされる。
Lispから呼び出した場合、この関数は以下と完全に等価:
(write-region start end filename t)
この関数はカレントバッファー内のstartとendで区切られたリージョンをfilenameで指定されたファイルに書き込む。
startがnil
なら、このコマンドはバッファーのコンテンツ全体(アクセス可能な範囲だけではない)をファイルに書き込んでendは無視する。
startが文字列なら、write-region
はバッファーのテキストではなくその文字列を追加する。その場合にはendは無視される。
appendが非nil
なら、指定されたテキストが(もしあれば)既存のファイルコンテンツに追加される。appendが数字ならwrite-region
はファイル開始位置からそのバイトオフセットをseekしてデータをそこに書き込む。
mustbenewが非nil
の場合には、filenameが既存ファイルの名前ならwrite-region
は確認を求める。mustbenewがシンボルexcl
なら、ファイルがすでに存在する場合にはwrite-region
は確認を求めるかわりにエラーfile-already-exists
をシグナルする。たとえwrite-region
が通常はシンボリックリンクをフォローして、もしシンボリックリンクが壊れていればpointed-toファイル(訳注:
ファイルへのハードリンクにたいするポインター)を作成するとしても、mustbenewがexcl
ならシンボリックリンクをフォローしない。
mustbenewがexcl
のときは、存在するファイルのテストに特別なシステム機能を使用する。少なくともローカルディスク上のファイルにたいしては、Emacsがファイルを作成する前にEmacsに通知せずに他のプログラムが同じ名前のファイルを作成することはありえない。
visitがt
なら、Emacsはバッファーとファイルの関連付けを設定してそのバッファーがそのファイルをvictiする。またカレントバッファーにたいする最終ファイル変更日時にfilenameをセットして、そのバッファーを未変更としてマークする。この機能はsave-buffer
により使用されるが、おそらくあなた自身が使用するべきではないだろう。
visitが文字列なら、それはvisitするファイルの名前を指定する。この方法を使えば、そのバッファーが別のファイルをvisitしていると記録しつつ1つのファイル(filename)にデータを書き込むことができる。引数visitはエコーエリアに使用される他にファイルのロックにも使用され、visitがbuffer-file-name
に格納される。この機能はfile-precious-flag
の実装に使用される。自分が何をしているか本当にわかっているのでなければこれを使用してはならない。
オプション引数locknameが非nil
なら、それはロックとアンロックの目的に使用するfilenameとvisitをオーバーライドするファイル名を指定する。
関数write-region
は書き込むデータをbuffer-file-format
によって指定される適切なファイルフォーマットに変換しするとともに、リストwrite-region-annotate-functions
内の関数の呼び出しも行う。ファイルのフォーマット変換を参照のこと。
write-region
は通常はエコーエリア内にメッセージ‘Wrote
filename’を表示する。visitがt
、nil
、文字列のいずれでもない場合、こまたはEmacsがbatchモード(batchモードを参照)で処理中ならこのメッセージは抑制される。この機能は内部的な目的のためにユーザーが知る必要がないファイルを使用したり、Emacsがbatchモードで処理中に有用である。
この変数の値がnil
ならwrite-region
はファイル書き込み後にシステムコールfsync
を使用する。これはたとえEmacsを低速化するとしても、電源喪失時のデータ損失リスクを軽減する。値がt
ならEmacsはfsync
を使用しない。デフォルト値はEmacsが対話的に実行されていればnil
、batchモードで実行時にはt
。ファイルと二次媒体を参照のこと。
with-temp-file
マクロは一時バッファー(temporary
buffer)をカレントバッファーとしてbodyフォームを評価して、最後にそのバッファーのコンテンツをfileに書き込む。これは終了時に一時バッファーをkillして、with-temp-file
フォームの前にカレントだったバッファーをリストアする。その後にbody内の最後のフォームの値をリターンする。
throw
やエラーによる異常なexit(abnormal exit)でも、カレントバッファーはリストアされる(非ローカル脱出を参照)。
with-temp-buffer
(Current
Bufferを参照)と同様に、このマクロが使用する一時バッファーではフックkill-buffer-hook
、kill-buffer-query-functions
(バッファーのkillを参照)、buffer-list-update-hook
(バッファーリストを参照)は実行されない。