質問

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

これを実行すると、「デバッグアサーションが失敗しました!...式:(「無効なファイルオープンモード」、0)というエラーメッセージが表示され、「プログラム」[3896] filesystem.exe:native 'がコードで終了しました。 3(0x3)。」

役に立ちましたか?

解決

あなたは読書のためにファイルを開きました(それが r inの立場 fopen("Drive2MB", "r");)。読書のために開かれたファイルに書き込むことはできません。

他のヒント

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

FOPENにR+を使用します

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

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

試す

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

Fopenの「R」部分を読むためにファイルを開きました。ファイルに書き込むには、読み取り/書き込みモードまたは書き込みモードで開くことができます。

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

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

私は個人的に「RW」を使用するのが好きではありません。ファイルを開くと、実際に開く理由が1つあるはずです。また、ファイルの開始に移動するためにfSeekを呼び出す必要はなく、FSEEKを使用してファイルポインターを進める必要はありません。 FOPENはファイルの開始時に自動的に開き、FWRITEはポインターを自動的に進めます。 FSEEKは、特定のポイントに到達するためにファイルの内部を「求めている」場合にのみ使用する必要があります。

指定した場合、ファイルから読んでいないため、書き込み( "w")モードのみが必要になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top