c语言文件操作fwrite和fread

2024-12-02 13:59:55
推荐回答(3个)
回答1:

fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:

//读取一个完整的文件
#include 
#include 
int main()
{
    FILE* pFile;   //文件指针
    long lSize;   // 用于文件长度
    char* buffer; // 文件缓冲区指针
    size_t result;  // 返回值是读取的内容数量
    pFile = fopen("myfile.bin" , "rb");
    if (pFile == NULL) {fputs("File error", stderr); exit(1);}    // 如果文件错误,退出1
    // 获得文件大小
    fseek(pFile , 0 , SEEK_END); // 指针移到文件末位
    lSize = ftell(pFile);  // 获得文件长度
    rewind(pFile);  // 函数rewind()把文件指针移到由stream(流)指定的开始处, 同时清除和流相关的错误和EOF标记
    // 为整个文件分配内存缓冲区
    buffer = (char*) malloc(sizeof(char) * lSize); // 分配缓冲区,按前面的 lSize
    if (buffer == NULL) {fputs("Memory error", stderr); exit(2);}  // 内存分配错误,退出2
    //  该文件复制到缓冲区
    result = fread(buffer, 1, lSize, pFile); // 返回值是读取的内容数量
    if (result != lSize) {fputs("Reading error", stderr); exit(3);} // 返回值如果不和文件大小,读错误
 
    // terminate // 文件终止
    fclose(pFile);
    free(buffer);
    return 0;
}

综合使用的例子。

#include 
int main()
{
    FILE* pFile;
    float buffer[] = { 2.0 , 3.0 , 8.0 };
    pFile = fopen("myfile.bin" , "wb"); // 打开文件写操作
    fwrite(buffer , 1 , sizeof(buffer) , pFile); // 把浮点数组写到文件 myfile.bin
    fclose(pFile); // 关闭文件
    float read[3];
    pFile = fopen("myfile.bin" , "rb"); // 重新打开文件读操作
    fread(read , 1 , sizeof(read) , pFile); // 从文件中读数据
    printf("%f\t%f\t%f\n", read[0], read[1], read[2]);
    fclose(pFile); // 关闭文件
    return 0;
}

回答2:

无语的写法..
你根本分不清什么事数字 什么事字符

如果你要输出txt里面的内容比较简单.

char buf[1024];

fread(&stud[j],sizeof(struct student),1,fp1);
改成
fread(buf,1024,1,fp1);

printf 改成 printf(%s, buf);

如果你要把 txt里面的字符变成数据.
那就需要解析txt了

回答3:

读了你的代码,我觉得,你在用fread的时候,其实你的意图是想将1.txt中的每一行按照你所定义的structure student中的字段格式,进行读取,将你的stud一个一个填充好。很遗憾,fread并不能做这件事情。fread会将1.txt中的每行看做一整个字符串,写到你给的每个&stud[j]开头的地址空间中,而无视你所给定的structure的定义,自然你printf就得不到预想的结果了。而fwrite倒是可以原原本本将写入的字串回写出来。
如果你想要按structure的格式读入1.txt的数据,那么就要用scanf咯。就像printf那样,scanf的用法你一定是懂的。