ファイルを読み取り、その内容を変更してファイルに書き戻したいとします。O_RDWRで開く - 上書きする方法は?
次のように私は、ファイルを読むためにopen
を使用します。
bfd = open(m_file_name.c_str(), O_RDWR)
をしかし、私が書くとき、それはちょっと古いものに追加しています。どのように私はそれを上書きすることができますか?
ファイルを読み取り、その内容を変更してファイルに書き戻したいとします。O_RDWRで開く - 上書きする方法は?
次のように私は、ファイルを読むためにopen
を使用します。
bfd = open(m_file_name.c_str(), O_RDWR)
をしかし、私が書くとき、それはちょっと古いものに追加しています。どのように私はそれを上書きすることができますか?
あなたのファイルは、元のサイズよりも今少ない場合あなたは、あなたが、新しいサイズにサイズを切り捨てる必要がありますlseek(2)
bfd = open(m_file_name.c_str(), O_RDWR);
// read your file
lseek(bfd, 0, SEEK_SET);
// do whatever manipulation & write file
を使用するか、古い端からバイトを残しておきます最後のファイルのそれが大きければ、あなたが書いているようにファイルは自動的に大きくなるはずです。
いいえサイズは同じです..私はそれが動作するかどうかを確認してみましょう:) – Amir
特定の位置に書きたい場合は、lseek
で検索する必要があります。
ファイル全体を上書きしようとしていませんか?それのほんの一部ですか?あなたがファイル全体を上書きしようとしているなら、これは悪い方法です。
ファイルを上書きしたい...ファイルのサイズがそのまま残ります – Amir
ファイル全体を上書きする場合は、 'O_WRONLY | O_CREAT | O_EXCL'を実行し、それを古いファイルに移動します。この方法では、プログラムがクラッシュした場合でも、元のファイルは失われません。 –
fseekのマンページをご覧ください。 –
@jcomeau_ictx: 'fseek'はファイル記述子では動作せず、' FILE * 'でのみ動作します。あなたは 'lseek'を考えています。 –
@Dietrichありがとう、私はおそらく投稿してはいけません。 –