/ 最近 .rdf 追記 編集 設定 本棚

脳log[20140311]



2014年03月11日 (火) [SakuraEditor]「[7787] 代替ストリームの保持」■確かに消える。メモ帳では消えない。「ファイルを開く」ダイアログや「名前を付けて保存」ダイアログを通すと無理だけど、>sakura.exe downloaded.from.web.js:Zone.Identifier すると代替ストリームが普通に編集できて上書き保存もできた。へー。■代替ストリームへの書き込みと読み出しは >echo HOGE > a.txt:altstrm と >more < a.txt:altstrm が簡単。■「サクラエディタはファイルの保存時に_tfopen関数の"wb"モードでファイルを開いていますが、"w"モードで開くと代替ストリームが消えてしまうようです。"a"モードで開くと代替ストリームが保持されますが、追記なので保存処理には使えません。」というヒントが手に入ったので CBinaryOutputStreamのコンストラクタ(付近)で COutputStreamを "ab"で初期化し、_chsize(_fileno(GetFp()), 0); でファイルを切り詰めてみた。これから無期限のひとばしら。例外対応処理は、ありません。■「ただし、ファイルを指定するには、FILE * のファイルポインタじゃ なくて、int のファイルディスクリプタを指定しますので、 fprintf で出力している場合は fflush して、吐き出したことを保 証してから、fileno でファイルディスクリプタを調べて、 ftruncate してから閉じてください。」参考になります。FILE*はバッファを付けて FDをラップしてるってことなのね(たぶん。『ふつリナ』を読み返したら書いてないかな?)。■SetEndOfFileという API(※Rubyの truncateで使われてた)もあるけど、これは HANDLEが対象でレイヤーが上な雰囲気(<いや、Cランタイムライブラリの下にあるのが Windowsの HANDLEなのか)。そちらはそちらで、FileMappingの面倒は見ないからな、という注意書きがある。