C语言替换文件某一行
来源:互联网 发布:淘宝严重违规 编辑:程序博客网 时间:2024/05/04 07:33
C语言提供了文件操作,但是替换文件的某一行比较麻烦,下面是我使用的一个方法,文件中存贮的内容如下所示:
11 1122 0 1122 * * 0 0 22 222 0 222 * * 0 0 33 333 0 333 * * 0 0通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell 。具体的函数函数原型如下所示:
FILE*fopen(const char*filename,const char *mode);int fprintf(FILE*stream,const char *format,...)int fscanf(FILE* stream,const char *format,...)int fseek(FILE*stream,long offset,int origin)long ftell(FILE* stream)首先,数据写入到文件中的是追加的形式。具体的写入代码如下所示:
主要写入时要指定每个数据的宽度,若不指定,当修改某行的数据,修改后的长度大于修改前得长度,将影响文件中的下一行。制定宽度之后,只要修改后的长度不大于制定的宽度,都不影响下面的内容。(这是注意点)
FILE *fp=fopen("clientinfo.txt","ar+");Clientinfo info;memset(&info,0,sizeof(Clientinfo));。。。。。。。。/*完成对info结构体的赋值*/fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);fprintf(fp,"\n");fclose(fp);修改处的代码如下所示,整个代码是我在MFC中实现的:
FILE *fp=fopen("clientinfo.txt","r+");Clientinfo info;long nline=0,n;memset(&info,0,sizeof(Clientinfo));int oldline=0;/*记录匹配位置的前一行的偏移量*/CString str;while((n=fscanf(fp,"%s %s %d %s %s %s %d %d",info.id,info.nickname,\&info.online,info.pwd,info.encryp,info.ip,&info.port,&info.fd))!=EOF){ str.Format("%d",nline); MessageBox(str); if(strncmp(info.id,id,id.GetLength())==0)/*查找要修改的位置*/ { oldline=nline; break; } nline=ftell(fp);}fseek(fp,oldline,SEEK_SET);/*定位到要修改的位置,注意,这个位置是上一次读的最后,故写的时候要先写换行,第一行除外*/ if(oldline!=0) { fprintf(fp,"\n"); } fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\ info.online,info.pwd,info.encryp,info.ip,info.port,info.fd); fprintf(fp,"\n"); fclose(fp);
下面是修改后的数据,修改第二行,没有影响前后的数据。 11 1122 0 1122 * * 0 0 22 222f 0 222f * * 0 0 33 333 0 333 * * 0 0
- C语言替换文件某一行
- C语言替换文件某一行
- 替换文件后缀名(C语言)
- C语言实现#include替换文件
- C语言实现文件字符替换
- C语言实现文件字符替换
- Linux 删除和替换文件中某一行的方法
- Linux 删除和替换文件中某一行的方法
- qt C++ 替换文件某一行等号之后的内容
- SHELL替换文本文件某一行
- shell 替换文件中的某一字符串
- Ant 替换某一文件中的字符串
- C语言字符替换
- C语言 字符串替换
- C语言替换字符串
- C语言宏替换
- 字符串替换C语言
- C语言宏替换
- Windows7安装IIS
- 要事第一
- java.security.NoSuchAlgorithmException: SSLContext SSL implementation not found
- vs2010发布网站
- GeekOS 遇到问题及解决方法
- C语言替换文件某一行
- javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: I
- Google reader真乃是神物
- [ ZOJ 1043 ][ POJ 1108 ] Split Windows
- 总结SQLite不支持的SQL语法有哪些
- 第三代透明加密技术
- 黎明前的黑暗
- “无法将类型"string"转换为"char"”?
- 让TextView的文本显示一行