2010-12-06 90 views
1

从来没有使用过fwrite(),所以我不确定我做错了什么。我只是现在就测试它,我想要做的就是试着写一个字符直到文件结束。我正在写的文件是我从老师的网站上下载的。当我检查它的属性时,类型只被列为“文件”。它应该只是一个空的2MB文件,供我们将代码写入(文件系统实验室,如果有人想知道的话)。这里是我的代码:“调试断言失败...表达式:(”C - fwrite()不输出到文件

#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'has exit with code 3(0x3)。“

+0

这功课吗? – Asaph 2010-12-06 06:46:41

+0

我希望这是一个关于如何使用文件系统的实验,而不是如何设计它们。因为在尝试设计甚至实现一个文件系统之前,你真的应该知道如何使用文件系统......(而且你的老师认为需要为你提供一个空文件会让我感到恐慌) – 2010-12-06 06:51:31

+0

这不是特别的,但是我将在作业中使用fwrite – Anon 2010-12-06 06:53:07

回答

3

您已打开文件以供阅读(这就是r代表fopen("Drive2MB", "r");)。您可能无法写入打开的文件以供阅读。

+0

Doh,一个愚蠢的错误,但不幸的是rw也不起作用。它给我一个错误消息“Debug Assertion Failed!.... Expression:(”无效的文件打开模式“,0),然后打印”The program'[3896] filesystem.exe:Native'已退出代码3(0x3 )。“ – Anon 2010-12-06 06:52:26

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

你打开你的文件只读

尝试

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

你在只读模式下打开它

使用R +的FOPEN

0

你已经打开的文件用的FOPEN的 “R” 部分阅读。要写入文件,您可以在读/写模式或写入模式下打开它。

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

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

我从不喜欢亲自使用“rw”。当你打开一个文件时,它真的应该有一个理由被打开。您也不需要调用fseek来移动到文件的开始位置,也不需要使用fseek来前进文件指针。 fopen会自动打开它到文件的开头,fwrite会自动提前指针。 fseek只能用于在文件内部寻找特定点的内容。

在你给出的情况下,你只需要写(“w”)模式,因为你没有从文件中读取数据。