2017-03-29 9 views
1

私はテキストを書いたので、File *fp = fopen("findPattern2.txt", "w+");のような(テキスト)ファイルを開きました。私がそこに持っている最後の文字は,です。今私はバックスペースを使用してその文字を削除したい。私は答えhereを読んだことがあります。バックスペースはカーソルを移動するだけです。次に、その文字を上書きする必要があります。これが私の行うことです。だから、私はfprintf(fp, "\b \b")を完全に消去して,を書きましたが、代わりにこれがファイルの後に表示されます:,BS BS。これらはすべて端末で動作します。なぜファイルはありませんか?ファイルで意図したとおりにバックスペース( b)が機能しないのはなぜですか?

これをファイルにする唯一の方法は、私がメモリマップして内容を編集し、新しいファイルにコピーして古いものを削除する場合だけです。

+0

'fseek'や' fsetpos'を使ってみましたか? – user694733

+0

@ user694733はい。できます。しかし、私の質問はそれに関するものではありません。 –

+0

私は質問したので質問しました*「私がメモリにマッピングし、その内容を編集し、新しいファイルにコピーして古いものを削除するのであれば、これをファイルにする唯一の方法が集まるからです。その文章は、あなたが解答を望むように聞こえるようにしますが、あなたのコメントはあなたが説明をしたいだけであることを示します。あなたはあなたの質問を編集して、答えから何を期待しているかを明確にするべきです。 – user694733

答えて

5

ファイルは、プログラムによって読み込まれたときにピクチャやビデオなどの意味のある結果を生成する単なるバイトの集合です。バックスペース文字が進行中の文字を削除する必要があることをプログラムが知っていない限り、何もしません。

あなたの端末は、バックスペースのような特殊文字に反応するように書かれたプログラムであり、それを受け取ったときに何をすべきかを知っています。

3

BS文字を端末に「印刷」すると、後者はこれを解釈してカーソルを左に移動します。

BS文字をファイルに「fprintf」すると、BS文字(単なるバイト)がファイルに書き込まれます。

2

カーソルと行の編集は、ファイルではなく、コンソールや端末にあるものです。

ファイルの仕組みを誤解しているようです。

ファイル内の編集の概念はありません。これは一連のバイトです。 fseek()を使用して上書きすることで、現在の場所(「カーソル」と呼ばれることもありますが、これはファイルがテキストエディタのように動作することを意味するわけではありません)を行い、新しいデータを書き出します。

関連する問題