2013-05-07 69 views
1

嗨我試圖不使用fopen(文件,「w」)覆蓋C中的文件;試圖不覆蓋C文件?

我的問題是該文件已經存在爲一個10 MB的文件,但是當我使用fopen時,該文件最終變爲1KB。我想寫一些文件,但我希望它保持相同的大小。我怎麼做到這一點?我看到「a +」將文件附加到文件的末尾,但如果我想在文件的開始處寫入文件而不擴大文件大小,該怎麼辦?這只是一個空文件

另外,有沒有辦法用C創建一個具有一定大小(如10MB)的文件?

回答

6

是的,這是可能的。通過打開它r+你打開它的'閱讀和寫作'(而w打開它寫新鮮)。

關於你提到的其他問題:打開一個文件,w和寫入1000個1024字節的塊像這樣的文件:

FILE *fp = fopen("file", "wb"); 
if(fp) { 
    int i = 0; 
    char Buf[1024]; 
    for(; i < 1000; ++i) 
     fwrite(Buf, 1, 1024, fp); 
    fclose(fp); 
} 

這一次,則fopen標誌爲您提供:

r - >打開文件供閱讀。 (文件保持不變)
w - >打開文件進行寫入。 (文件被擦除)
a - >打開要追加的文件。 (文件保持不變,文件指針移動到終點)

從這三個主要類型

除此之外,你可以添加一些額外的選項:
b - >打開文件的二進制,忽略像\ n
格式化字符 t - >以文本方式打開文件,特別是在Windows下將\ n解析爲\ r \ n。

+0

這樣比較好。總之,請把問題編輯成更好的格式。改變問題的標題。我很懶,很困。 – 2013-05-07 20:19:24

1

打開文件,然後使用fseek將您的位置設置爲文件的開頭。

編輯:打開時使用r+模式。從man fopen

r+  Open for reading and writing. The stream is positioned at 
     the beginning of the file. 
+1

他想保持文件的大小相同。 – 2013-05-07 20:13:10

+0

是的,更正了。 :) 謝謝。 – 2013-05-07 20:15:42

1

* 一種方式來創建在C文件具有一定規模(如10MB)?

這樣的:

#include <stdio.h> 

int main(void){ 
    const char *TenMBfile = "TenMB"; 
    FILE *fp; 
    fp=fopen(TenMBfile, "w"); 
    fseek(fp, 10*1024*1024-1,SEEK_SET); 
    fputc(0, fp); 
    fclose(fp); 
    return 0; 
} 
-1

惠!我曾在一個項目中添加文字或'博客'貼在我的網頁上,我發現了一個非常酷的方式來做到這一點。 爲此,我將使用HTML文件和我的程序。 HTML文件:

<html> 
 
<body> 
 
<p> Hey this is the asssdsadasdsadas paragraph</p><br> 
 
<p> Hey this is the asssdsadasdsadas paragraph</p><br> 
 

 
</body> 
 
</html>

C文件:

printf("Please enter the number of bytes to write from in %s .\n", argv[0]); 
    int offset; 
    scanf("%d", &offset); 
    fseek(fp, -offset, SEEK_END); 
    strcat(argv[1], "<br>\n\n"); 
    fprintf(fp, "%s", argv[1]); 
    fprintf(fp, "</body>\n</html>\n"); 

HTML解釋:

  1. 我開始一行中所定義
  2. 我把一個空白升我將在那裏寫信。
  3. 然後我得到了我所有的結束標籤。

C解釋:

  1. 我問我想要多少字節從文件至極的結局追求的是在這種情況下(寫入空行)17。
  2. 我得到的數字與scanf()
  3. 然後我尋找在文件中減x字節,因爲通常它會添加字節,我們指定whence。
  4. 然後,爲了這個目的,我在這裏添加一箇中斷標籤和2個換行符來繼續循環。
  5. 然後我寫我想要的文字。
  6. 最後,我添加了我的最後2個標籤,因爲當我編寫我的文本時,它會覆蓋它後面的所有標籤。之後,光標位於最後一個換行符之後,我可以寫結束標籤。

所以...這是你如何做到這一點。