次の内容のテキスト ファイルがあるとします: abcdefghk
新しいテキスト xyz で位置インデックス 3 にテキストを書きたい
新しいテキスト ファイル abcxyzghk が作成されるようにします。
ネイティブ C++ でこれを達成するにはどうすればよいですか?
次の内容のテキスト ファイルがあるとします: abcdefghk
新しいテキスト xyz で位置インデックス 3 にテキストを書きたい
新しいテキスト ファイル abcxyzghk が作成されるようにします。
ネイティブ C++ でこれを達成するにはどうすればよいですか?
fseek
配置して書き直すだけです。挿入する必要がある場合は、別の方法を使用する必要があります。まず、追加 ("a+t") のために開き、位置を設定し、書き込みます。
if (FILE* f = fopen("", "a+t"))
{
const char* line = "xyz";
const long int offset = 3;
fseek(f, offset, SEEK_SET);
fputs(line, f);
fclose(f);
}
これは C++ コードであることに注意してください。 if スコープの下に置いて、 afterFILE* f
を誤って使用しないようにしています。考えられる I/O 例外 ( EOF の外側) に注意してください。f
fclose
fseek
一般に、テキスト ファイルの途中でデータを変更する唯一の方法は、テキスト ファイルを読み取り、メモリ内のデータを変更し、ファイル全体を (できれば別の名前のファイルに) 書き換えてから、元のファイルを削除して新しいファイルの名前を変更することです。 )。ただし、置換テキストが元のテキストとまったく同じ長さで、どちらにも改行がない場合は、その位置まで読み取ってから、その位置に書き込むことができます。
または、バイナリ モードでファイルを開き、 を使用して任意の位置にシークし、ostream::seekp
そこに書き込むこともできます。それ以外の場合、ファイルがテキストとして扱われる場合、改行に関する同じ制限がこの場合にも適用されます。また、すべての場合において、置換データは、置換するデータとまったく同じ長さである必要があります。