首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言怎么对已写入文件中的数据加以修改

2013-11-03 
求教: C语言如何对已写入文件中的数据加以修改?我想思路应该是,写入-读取-修改-再写入。但实现不知怎样

求教: C语言如何对已写入文件中的数据加以修改?
       我想思路应该是,写入->读取->修改->再写入。但实现不知怎样做。我试了一下,但不行。麻烦看看问题何在。
//change data written in a file

#include <stdio.h>
#include <stdlib.h>

#define SIZE 41
#define MAX  81

struct person{
    char name[SIZE];
    unsigned short age;
    char address[MAX];
    char job[SIZE];
};

int main(void)
{
    struct person info;
    struct person rec;
    struct person turnout;
    FILE * fp;
    long fl;

    if((fp = fopen("info.dat","wb")) == NULL)
    {
        fprintf(stderr, "Error opening %s", "info.dat");
        exit(EXIT_FAILURE);
    }
    printf("Name: ");
    fgets(info.name, SIZE, stdin);
    printf("\nAge: ");
    scanf("%u", &info.age);
    getchar();
    printf("\nAddress: ");
    fgets(info.address, SIZE, stdin);
    printf("\nJob: ");
    fgets(info.job, SIZE, stdin);
    fwrite(&info, sizeof (struct person), 1, fp);
    puts("\nOriginally:");
    printf("Name: %s", info.name);
    printf("\nAge: %u",info.age);
    printf("\nAddress: %s", info.address);
    printf("\nJob: %s", info.job);
    fl = ftell(fp);
    fseek(fp, fl-(long)sizeof(struct person), SEEK_CUR);
    fread(&rec, sizeof (struct person), 1, fp);
    puts("Rec:");
    puts("\nNow:");
    printf("Name: %s", rec.name);
    printf("\nAge: %u",rec.age);
    printf("\nAddress: %s", rec.address);
    printf("\nJob: %s", rec.job);
    printf("\nName: ");
    fgets(rec.name, SIZE, stdin);
    printf("\nAge: ");
    scanf("%u", &rec.age);
    getchar();
    printf("\nAddress: ");
    fgets(rec.address, SIZE, stdin);
    printf("\nJob: ");
    fgets(rec.job, SIZE, stdin);
    fl = ftell(fp);
    fseek(fp, fl-(long)sizeof(struct person), SEEK_CUR);
    fwrite(&rec, sizeof (struct person), 1, fp);
    fseek(fp, -(long)sizeof(struct person), SEEK_CUR);
    fread(&turnout, sizeof (struct person), 1, fp);
    puts("\nNow:");
    printf("Name: %s", turnout.name);
    printf("\nAge: %u",turnout.age);
    printf("\nAddress: %s", turnout.address);
    printf("\nJob: %s", turnout.job);

    fclose(fp);

    return 0;
} C 文件 数据
[解决办法]


  if((fp = fopen("info.dat","wb")) == NULL)
//改成,
  if((fp = fopen("info.dat","wb+")) == NULL)

// 建议检查每个函数的返回值!

[解决办法]
unsigned int age;

scanf("%u", &info.age);
要是定义short  会报警告的

 fwrite(&info, sizeof (struct person), 1, fp);
这个不支持直接写结构体吧 你不可以写4句吗 一个一个写进去 这句话有问题
[解决办法]
内存对齐造成的 
详情请看
http://bbs.csdn.net/topics/390209790
[解决办法]
google, 看看别人如何操作文件的
[解决办法]
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。

热点排行