質問
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")モードのみが必要になります。