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”。当你打开一个文件时,它确实应该有一个被打开的理由。您也不需要调用 fseek 来移动到文件的开头,也不需要使用 fseek 来推进文件指针。fopen 将自动将其打开到文件的开头, fwrite 将自动推进指针。仅当您在文件内部“寻找”以到达特定点时,才应使用 fseek。

在您给出的情况下,您只需要写入(“w”)模式,因为您从未从文件中读取。

于 2010-12-06T06:51:24.370 回答
0
  1. 使用 fopen r+ 或 w+ 打开文件。
  2. fwrite 完成后,使用 fflush 将数据刷新到磁盘。
  3. 使用 ferror 检查 fwrite 完成后文件流是否有问题。
  4. 检查磁盘是否有足够的可用空间。

我用3、4解决了这个问题。

于 2022-03-02T01:29:06.343 回答