从未使用过fwrite(),所以我不确定我到底做错了什么。我现在只是测试它,我想要做的就是尝试将一个char写入文件,直到它到达终点。我写的文件是我从老师的网站上下载的文件。当我检查它的属性时,类型仅列为“文件”。它应该只是一个空的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 :(”无效的文件打开模式“,0)并打印”程序'[3896] filesystem.exe:Native'具有退出代码3(0x3)。“
答案 0 :(得分:3)
您已打开文件进行阅读(这是r
代表的fopen("Drive2MB", "r");
)。您可能无法写入为阅读而打开的文件。
答案 1 :(得分:1)
你是以只读模式打开它
将r +用于fopen
答案 2 :(得分:0)
fp = fopen("Drive2MB", "r")
以只读方式打开文件
陷阱>
fp = fopen("Drive2MB", "r+");
答案 3 :(得分:0)
您已使用fopen的“r”部分打开了要读取的文件。要写入文件,可以在读/写模式或写模式下打开它。
// Read/write mode
fp = fopen("Drive2MB", "r+");
// Write only mode
fp = fopen("Drive2MB", "w");
我从不喜欢亲自使用“rw”。当你打开一个文件时,它应该有一个理由被打开。您也不需要调用fseek来移动到文件的开头,也不需要使用fseek来推进文件指针。 fopen会自动将其打开到文件的开头,fwrite会自动推进指针。只有在“寻找”文件内部才能到达特定点时才应使用fseek。
在你给出的情况下,你只需要写(“w”)模式,因为你没有从文件中读取。