| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1577 人关注过本帖
标题:C语言最简单的修改文本文件?
取消只看楼主 加入收藏
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 23楼 TonyDeng
是不是在VC6里面没有这个宏啊?
2015-08-04 20:46
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 24楼 TonyDeng
嗯嗯,和你交流才知道原来VC已经变到VS2012了,我回到学校马上去下载,我的笔记本放在学校了,现在用家里的配置低的电脑。
2015-08-04 20:48
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 28楼 TonyDeng
好的,十分感谢你,我争取这两天深度去理解链表和二进制文件读写。
2015-08-04 21:19
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 28楼 TonyDeng
你给示范的程序,里面最核心的一段应该是这个函数
void Update_Data(const char* filename, const Student* student, size_t index)
{
    FILE* file;
    if (fopen_s(&file, filename, "rb+") == 0)
    {
        size_t count;
        fread(&count, sizeof(count), 1, file);
        fseek(file, (index - 1) * sizeof(Student), SEEK_CUR);
        fwrite(student, sizeof(Student), 1, file);
        fclose(file);
    }
    else
    {
        printf_s("File %s update failure.\n", filename);
    }
}
这个函数我是这样理解的,用fseek函数把文件读取的内部指针弄到我们想要改的数据那,然后重新把数据输入进去,输入多少数据,就覆盖多少数据,类似于word文档的改写模式。不知道这样理解对不对?

这里面我还有个疑问,就是定义count这个参数是用来干嘛的?

还有整个程序里面很多函数都出现fread(&count, sizeof(count), 1, file);,这一语句的意思是不是“读取一个‘sizeof(count)’字节的数据项到count里面”?我查一下,应该是这样的意思。那么按照这样理解count这个参数存储的东西就是文本文件里面的第一个值。可是我觉得这里count应该是代表文件里面有多少个“组”,但是这样我就没办法理解fread(&count, sizeof(count), 1, file);这一个语句了。

还望你能帮我理解到本质。
2015-08-05 10:18
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 31楼 TonyDeng
嗯嗯,我已经下载好VS2010了,原来vs2010在XP系统里面能装!
2015-08-06 09:47
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 31楼 TonyDeng
我懂了!!!!原来在Save_Data函数里面,有这样一个语句“fwrite(&count, sizeof(count), 1, file);”后面的才需要先发文件的第一个值给找个参数给占了,后面再去移动内部指针。这里_countof(students)出来的值是3,那个程序我也大致弄懂了。后面我将把这个随机储存用到我的小系统里面。但是这里我有个疑问,就是你说的

“旧的方法是sizeof(arr)/sizeof(char),亦即先算数组的总字节数,除以每个元素的尺寸。对char arr[10],就除以sizeof(char),对int arr[10],就除以sizeof(int)。”

我想试一试这个方法,但是怎么弄都报错,我就重新打开一个,编个小代码,结果还是不行。
#include<stdio.h>

void main()
{
    int a[3];
    int b;
    for(int i=0;i<3;i++)
        scanf("%d",&a[i]);
    for(i=0;i<3;i++)
        printf("%d\n",a[i]);
    b=sizeof(a)/sizeof(int)
    printf("%d",b);
}
这个小程序运行不下去的。咋回事啊?

[ 本帖最后由 列车永不停息 于 2015-8-6 11:23 编辑 ]
2015-08-06 11:19
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 35楼 TonyDeng
第一段我理解的意思是:要“规整”,牺牲一定的内存也要让数据变得整齐,方便读取,修改。

而第二段,我就懵了。

其一,“内存管理模块”是不是指我这些天一直问你的“如何在就在文件中修改数据”?

其二,“数据用磁盘文件交换”又是不是指修改文件的方式,还是用输出到数组里面,然后在数组里面修改,而后再次覆盖到文件里面。
2015-08-07 15:04
快速回复:C语言最简单的修改文本文件?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016073 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved