Next: , Previous: , Up: Files   [Contents][Index]


25.4 ファイルへの書き込み

関数append-to-filewrite-regionを使用することによってディスク上のファイルにバッファーのコンテンツやバッファーの一部を直接書き込むことができます。visitされているファイルに書き込むためにこれらの関数を使用しないでください。これによってvisitにたいするメカニズムが混乱するかもしれません。

Command: append-to-file start end filename

この関数はカレントバッファー内でstartendによるリージョンのコンテンツをファイルfilenameの終端に追加する。そのファイルが存在しなければ作成する。この関数はnilをリターンする。

filenameに書込不可能なファイルやファイルを作成不可なディレクトリー内の存在しないファイルを指定するとエラーがシグナルされる。

Lispから呼び出した場合、この関数は以下と完全に等価:

(write-region start end filename t)
Command: write-region start end filename &optional append visit lockname mustbenew

この関数はカレントバッファー内のstartendで区切られたリージョンをfilenameで指定されたファイルに書き込む。

startnilなら、このコマンドはバッファーのコンテンツ全体(アクセス可能な範囲だけではない)をファイルに書き込んで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ファイル(訳注: ファイルへのハードリンクにたいするポインター)を作成するとしても、mustbenewexclならシンボリックリンクをフォローしない。

mustbenewexclのときは、存在するファイルのテストに特別なシステム機能を使用する。少なくともローカルディスク上のファイルにたいしては、Emacsがファイルを作成する前にEmacsに通知せずに他のプログラムが同じ名前のファイルを作成することはありえない。

visittなら、Emacsはバッファーとファイルの関連付けを設定してそのバッファーがそのファイルをvictiする。またカレントバッファーにたいする最終ファイル変更日時にfilenameをセットして、そのバッファーを未変更としてマークする。この機能はsave-bufferにより使用されるが、おそらくあなた自身が使用するべきではないだろう。

visitが文字列なら、それはvisitするファイルの名前を指定する。この方法を使えば、そのバッファーが別のファイルをvisitしていると記録しつつ1つのファイル(filename)にデータを書き込むことができる。引数visitはエコーエリアに使用される他にファイルのロックにも使用され、visitbuffer-file-nameに格納される。この機能はfile-precious-flagの実装に使用される。自分が何をしているか本当にわかっているのでなければこれを使用してはならない。

オプション引数locknameが非nilなら、それはロックとアンロックの目的に使用するfilenamevisitをオーバーライドするファイル名を指定する。

関数write-regionは書き込むデータをbuffer-file-formatによって指定される適切なファイルフォーマットに変換しするとともに、リストwrite-region-annotate-functions内の関数の呼び出しも行う。Format Conversionを参照のこと。

write-regionは通常はエコーエリア内にメッセージ‘Wrote filename’を表示する。visittnil、文字列のいずれでもない場合、こまたはEmacsがbatchモード(Batch Modeを参照)で処理中ならこのメッセージは抑制される。この機能は内部的な目的のためにユーザーが知る必要がないファイルを使用したり、Emacsがbatchモードで処理中に有用である。

Variable: write-region-inhibit-fsync

この変数の値がnilならwrite-regionはファイル書き込み後にシステムコールfsyncを使用する。これはたとえEmacsを低速化するとしても、電源喪失時のデータ損失リスクを軽減する。値がtならEmacsはfsyncを使用しない。デフォルト値はEmacsが対話的に実行されていればnil、batchモードで実行時にはtFiles and Storageを参照のこと。

Macro: with-temp-file file body…

with-temp-fileマクロは一時バッファー(temporary buffer)をカレントバッファーとしてbodyフォームを評価して、最後にそのバッファーのコンテンツをfileに書き込む。これは終了時に一時バッファーをkillして、with-temp-fileフォームの前にカレントだったバッファーをリストアする。その後にbody内の最後のフォームの値をリターンする。

throwやエラーによる異常なexit(abnormal exit)でも、カレントバッファーはリストアされる(Nonlocal Exitsを参照)。

The Current Bufferwith-temp-bufferも参照のこと。