2010-12-06 92 views
1

從來沒有使用過fwrite(),所以我不確定我做錯了什麼。我只是現在就測試它,我想要做的就是試着寫一個字符直到文件結束。我正在寫的文件是我從老師的網站上下載的。當我檢查它的屬性時,類型只被列爲「文件」。它應該只是一個空的2MB文件,供我們將代碼寫入(文件系統實驗室,如果有人想知道的話)。這裏是我的代碼:「調試斷言失敗...表達式:(」C - fwrite()不輸出到文件

#include <stdio.h> 
#include <string.h> 
int main() 
{ 
    char c; 
    FILE *fp; 
    char testing[2] = {'c'}; 

    fp = fopen("Drive2MB", "rw"); 

    fseek(fp, 0, SEEK_SET);  //make sure pointers at beginning of file 
    while((c=fgetc(fp))!=EOF) 
    { 
     fwrite(testing, 1, sizeof(testing), fp); 
     fseek(fp, 1, SEEK_CUR); //increment pointer 1 byte 
    } 
    fclose(fp); 
} 

當我運行此,錯誤消息彈出說無效的文件打開方式「 0),並打印」程序「[3896 ] filesystem.exe:Native'has exit with code 3(0x3)。「

+0

這功課嗎? – Asaph 2010-12-06 06:46:41

+0

我希望這是一個關於如何使用文件系統的實驗,而不是如何設計它們。因爲在嘗試設計甚至實現一個文件系統之前,你真的應該知道如何使用文件系統......(而且你的老師認爲需要爲你提供一個空文件會讓我感到恐慌) – 2010-12-06 06:51:31

+0

這不是特別的,但是我將在作業中使用fwrite – Anon 2010-12-06 06:53:07

回答

3

您已打開文件以供閱讀(這就是r代表fopen("Drive2MB", "r");)。您可能無法寫入打開的文件以供閱讀。

+0

Doh,一個愚蠢的錯誤,但不幸的是rw也不起作用。它給我一個錯誤消息「Debug Assertion Failed!.... Expression:(」無效的文件打開模式「,0),然後打印」The program'[3896] filesystem.exe:Native'已退出代碼3(0x3 )。「 – Anon 2010-12-06 06:52:26

0
fp = fopen("Drive2MB", "r") 

你打開你的文件只讀

嘗試

fp = fopen("Drive2MB", "r+"); 
1

你在只讀模式下打開它

使用R +的FOPEN

0

你已經打開的文件用的FOPEN的 「R」 部分閱讀。要寫入文件,您可以在讀/寫模式或寫入模式下打開它。

// Read/write mode 
fp = fopen("Drive2MB", "r+"); 

// Write only mode 
fp = fopen("Drive2MB", "w"); 

我從不喜歡親自使用「rw」。當你打開一個文件時,它真的應該有一個理由被打開。您也不需要調用fseek來移動到文件的開始位置,也不需要使用fseek來前進文件指針。 fopen會自動打開它到文件的開頭,fwrite會自動提前指針。 fseek只能用於在文件內部尋找特定點的內容。

在你給出的情況下,你只需要寫(「w」)模式,因爲你沒有從文件中讀取數據。