C語言;rewind()和開檔問題

當我打

FILE *intest;

FILE *outtest;

int c;

intest=fopen("test.dat","rb");

outtest=fopen("test2.dat","wb");

while((c=fgetc(intest))!=EOF){

fputc(c,outtest);

rewind(outtest); <--------我原先想法是回到outtest指標的開頭然後再輸入,認為可以達到reverse的效果,但是為什麼test2.dat會變成空的呢??

}

Update:

program 阿邦 你指的是fopen()的用法媽?還是其他的??

如果是fopen的話我是用2元的方式存檔,所以用rb和wb

不是的話請告訴我是哪一個錯了~謝謝

~感謝回覆

Update 2:

請問東邪無弓大大:

fseek(outtest, ftell(intest) -1 , SEEK_SET);

ftell(intest)為什麼要-1呢??

Update 3:

SEEK_END是將指標移到最後一個資料的地方還是資料後面(不含資料)??

Update 4:

感謝東邪無弓大大

我懂了.......也感謝slash大大

3 Answers

Rating
  • 1 decade ago
    Favorite Answer

    #include

    main()

    {

    FILE *intest;

    FILE *outtest;

    int c;

    intest = fopen(&quot;test.dat&quot;, &quot;rb&quot;);

    outtest = fopen(&quot;test2.dat&quot;, &quot;wb&quot;);

    fseek(intest, 0L, SEEK_END);

    fseek(outtest, ftell(intest), SEEK_SET);

    rewind(intest);

    while ((c = fgetc(intest)) != EOF)

    {

    fputc(c, outtest);

    fseek(outtest, -2L, SEEK_CUR);

    }

    fclose(intest);

    fclose(outtest);

    }

    2008-06-03 00:19:57 補充:

    To 東邪無弓,

    寫太快了, 沒注意到.

    對, 這樣會導致檔案開頭多一個未知 byte.

    謝謝.

    Source(s): 我的頭腦
  • 1 decade ago

    TO slash大:

    fseek(outtest, ftell(intest) -1 , SEEK_SET);

    這樣才不會偏移 1 Byte。

    2008-06-02 20:49:43 補充:

    TO 提問者:

    fseek(intest, 0L, SEEK_END);

    ftell(intest) 傳回的將是該檔的長度(BYTES),但別忘了,檔案指標由 0 開始,所以檔案最後一個字元的指標要將該傳回值減 1 。(0~N-1)

    你可以實作驗證看看。

    2008-06-02 21:14:24 補充:

    易言之,

    fseek(intest, 0L, SEEK_END);

    會把讀寫指標指向EOF的位置。(最後字元的次一位置)

  • 1 decade ago

    你涵式的用法有點怪怪的,參考以下網址http://www.cplusplus.com/reference/clibrary/cstdio...

Still have questions? Get your answers by asking now.