Top > OOobbs2 > 103

OOobbs2/103 Edit

  • サマリ: 文字エンコード指定付き、ファイル追加書き込みの方法について
  • 環境: General
  • 状態: 解決
  • 投稿者: む~む~?
  • 投稿日: 2008-04-16 (水) 15:15:39

質問 Edit

通常、ファイル書き込みは、 ここでも紹介されているように、

oFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
oOutputStream = CreateUnoService("com.sun.star.io.TextOutputStream")
oOutputStream.setOutputStream(oFileAccess.openFileWrite(strSaveFileNameUrl))
oOutputStream.setEncoding(strEncode)
oOutputStream.writeString(strSaveString)
oOutputStream.closeOutput()

のようにしているのですが、 これですと、ただの上書きになってしまいます。 既存ファイルが存在していれば、いったん削除してから書き込み、 というふうにしているのですが、 既存ファイルに追加書き込みという方法は、ないのでしょうか。

http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html などにて、色々と調べたのですが、良い方法がみつかりませんでした。

Open sSaveFileName For Append As #s16FileNo

ですと、追加書き込みができるのですが、 文字エンコードが指定できないので、困っております。

回答 Edit

  • openFileReadWrite メソッドでファイルを開き、ファイルサイズ分だけスキップすれば終わりに追加書き込みできるようです。
sURL = "file:///home/hoge/text.txt"
txt = "honyarara" 

sfa = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
to = CreateUnoService("com.sun.star.io.TextOutputStream")

' ファイルサイズ取得
size = sfa.getSize(sURL)

stream = sfa.openFileReadWrite(sURL)

' XInputStream でファイルサイズ分スキップ
io = stream.getInputStream()
io.skipBytes(size)

to.setOutputStream(stream.getOutputStream())
to.writeString(txt)
to.closeOutput()
io.closeInput()
  • はにゃ? 2008-04-16 (水) 16:25:12
  • C言語でいうところの、fopen(FileName, "aw");のようにはいかないのですね。 ご指摘の方法でうまくいきました。ありがとうございました。 -- む~む~ 2008-04-17 (木) 10:59:06

感想,コメント,メモ Edit



Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes