/
最近
.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の面倒は見ないからな、という注意書きがある。
翌日へ
前日へ