0

既存のファイルの指定した位置にテキストを追加しようとしています。コードを実行すると、指定された位置ではなく、最後のファイルに新しいテキストが追加されます。私は何を間違えましたか?

fs=openFile "c:/my.txt" mode:"a+"
skipToString  fs ";"
seek fs (filepos -1)
format "add new text" to:fs
close fs

му.txt の内容

levl_name        # tech_lvl,military_lvl,desert_lvl;
body        # Column,Pilaster,Plinth,Wall_,Floor_;
prefix1        # _left_,_right_,_top_,_bottom_;
prefix2        # _bad_, _good_,_Tall_, _Low_;
4

2 に答える 2

1

別の方法は、stringStream に変換し、そこですべての作業を行い、単純にファイルを上書きすることです。

于 2014-10-31T00:33:39.780 に答える
0

リファレンスが明示的に述べているように、「ファイルが "a" アクセス タイプのいずれかで開かれると、すべての書き込み操作はファイルの最後で行われます。ファイル ポインターは、シークを使用して再配置できますが、書き込み操作が実行される前に常にファイルの末尾に戻されます。

また、ストリームに書き込むとコンテンツが上書きされ、その位置からファイルの最後まですべてを取得して保存し、編集して再度貼り付ける必要があります。

file = @"c:\my.txt"

ms = MemStreamMgr.openFile file
size = ms.size()
MemStreamMgr.close ms

fs = openFile file mode:"r+"
skipToString fs ";"
pos = filePos fs - 1
seek fs pos
previousContent = readChars fs (size - pos)
seek fs pos
format "add new text" to:fs
format previousContent to:fs
close fs

ファイル形式を変更できる場合は、INI/XML ファイルの使用を検討してください。

于 2014-10-21T11:53:20.163 に答える