1

fwrite() を使用したことがないため、何が間違っているのか正確にはわかりません。私は今それをテストしているだけで、最後に到達するまでファイルに単一の文字を書き込もうとするだけです。私が書いているファイルは、先生のウェブサイトからダウンロードしたものです。プロパティを確認すると、タイプが「ファイル」しか表示されていません。これは、コードを書き込むための 2MB の空のファイルであるはずです (ファイル システム ラボ)。これが私のコードです:

#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);
} 

これを実行すると、"Debug Assertion Failed!...Expression:("Invalid file open mode",0) というエラー メッセージが表示され、"The program '[3896] filesystem.exe: Native' has exited with code. 3 (0x3)」です。

4

5 に答える 5

3

ファイルを読み取り用に開いています (これは、 の のr略ですfopen("Drive2MB", "r");)。読み取り用に開かれたファイルに書き込むことはできません。

于 2010-12-06T06:46:01.897 に答える
1

読み取り専用モードで開いています

fopen に r+ を使用する

于 2010-12-06T06:46:22.650 に答える
0
fp = fopen("Drive2MB", "r")

ファイルを読み取り専用で開く

試す

fp = fopen("Drive2MB", "r+"); 
于 2010-12-06T06:46:02.990 に答える
0

fopen の "r" 部分を使用して、読み取り用にファイルを開きました。ファイルに書き込むには、読み取り/書き込みモードまたは書き込みモードでファイルを開くことができます。

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

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

私は個人的に「rw」を使いたくない。ファイルを開くとき、それを開く理由は 1 つである必要があります。また、ファイルの先頭に移動するために fseek を呼び出す必要も、ファイル ポインターを進めるために fseek を使用する必要もありません。fopen は自動的にファイルの先頭まで開き、fwrite は自動的にポインターを進めます。fseek は、特定のポイントに到達するためにファイル内を「シーク」する場合にのみ使用してください。

あなたが与えた場合、ファイルから読み取ることはないので、書き込み(「w」)モードのみが必要です。

于 2010-12-06T06:51:24.370 に答える