Next: File Locks, Previous: Reading from Files, Up: Files [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内の関数の呼び出しも行う。Format Conversionを参照のこと。
write-regionは通常はエコーエリア内にメッセージ‘Wrote
filename’を表示する。visitがt、nil、文字列のいずれでもない場合、こまたはEmacsがbatchモード(Batch Modeを参照)で処理中ならこのメッセージは抑制される。この機能は内部的な目的のためにユーザーが知る必要がないファイルを使用したり、Emacsがbatchモードで処理中に有用である。
この変数の値がnilならwrite-regionはファイル書き込み後にシステムコールfsyncを使用する。これはたとえEmacsを低速化するとしても、電源喪失時のデータ損失リスクを軽減する。値がtならEmacsはfsyncを使用しない。デフォルト値はEmacsが対話的に実行されていればnil、batchモードで実行時にはt。Files and Storageを参照のこと。
with-temp-fileマクロは一時バッファー(temporary
buffer)をカレントバッファーとしてbodyフォームを評価して、最後にそのバッファーのコンテンツをfileに書き込む。これは終了時に一時バッファーをkillして、with-temp-fileフォームの前にカレントだったバッファーをリストアする。その後にbody内の最後のフォームの値をリターンする。
throwやエラーによる異常なexit(abnormal exit)でも、カレントバッファーはリストアされる(Nonlocal Exitsを参照)。
with-temp-buffer (Current
Bufferを参照)と同様に、このマクロが使用する一時バッファーではフックkill-buffer-hook、kill-buffer-query-functions
(Killing Buffersを参照)、buffer-list-update-hook (Buffer Listを参照)は実行されない。