2011-10-18 87 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',然後將其移到舊文件上。這樣,如果你的程序崩潰了,你將不會丟失原始文件。 –