我想讀取文件並更改其內容並將其寫回文件。用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謝謝,我可能不應該發佈。 –