2011-10-18 10 views
0

ファイルを読み取り、その内容を変更してファイルに書き戻したいとします。O_RDWRで開く - 上書きする方法は?

次のように私は、ファイルを読むためにopenを使用します。

bfd = open(m_file_name.c_str(), O_RDWR) 

をしかし、私が書くとき、それはちょっと古いものに追加しています。どのように私はそれを上書きすることができますか?

+1

fseekのマンページをご覧ください。 –

+1

@jcomeau_ictx: 'fseek'はファイル記述子では動作せず、' FILE * 'でのみ動作します。あなたは 'lseek'を考えています。 –

+0

@Dietrichありがとう、私はおそらく投稿してはいけません。 –

答えて

3

あなたのファイルは、元のサイズよりも今少ない場合あなたは、あなたが、新しいサイズにサイズを切り捨てる必要がありますlseek(2)

bfd = open(m_file_name.c_str(), O_RDWR); 
// read your file 
lseek(bfd, 0, SEEK_SET); 
// do whatever manipulation & write file 

を使用するか、古い端からバイトを残しておきます最後のファイルのそれが大きければ、あなたが書いているようにファイルは自動的に大きくなるはずです。

+0

いいえサイズは同じです..私はそれが動作するかどうかを確認してみましょう:) – Amir

0

特定の位置に書きたい場合は、lseekで検索する必要があります。

ファイル全体を上書きしようとしていませんか?それのほんの一部ですか?あなたがファイル全体を上書きしようとしているなら、これは悪い方法です。

+0

ファイルを上書きしたい...ファイルのサイズがそのまま残ります – Amir

+0

ファイル全体を上書きする場合は、 'O_WRONLY | O_CREAT | O_EXCL'を実行し、それを古いファイルに移動します。この方法では、プログラムがクラッシュした場合でも、元のファイルは失われません。 –

関連する問題