C语言修改文件中一部分内容


C语言修改文件中一部分内容


转自: http://www.xxlinux.com/linux/article/development/soft/20070601/8652.html


格式:文件指针名=fopen(文件名,使用文件方式)


参数:
文件名 意义
"C:\\TC\\qwe.txt" 文件C:\TC\qwe.txt
"qwe.txt" 和程序在同一目录下的qwe.txt


文件使用方式   意 义
“rt”      只读打开一个文本文件,只允许读数据
“wt”      只写打开或建立一个文本文件,只允许写数据
“at”      追加打开一个文本文件,并在文件末尾写数据
“rb”      只读打开一个二进制文件,只允许读数据
“wb”       只写打开或建立一个二进制文件,只允许写数据
“ab”       追加打开一个二进制文件,并在文件末尾写数据
“rt+”      读写打开一个文本文件,允许读和写
“wt+”      读写打开或建立一个文本文件,允许读写
“at+”     读写打开一个文本文件,允许读,或在文件末追加数据
“rb+”      读写打开一个二进制文件,允许读和写
“wb+”      读写打开或建立一个二进制文件,允许读和写
“ab+”      读写打开一个二进制文件,允许读,或在文件末追加数据


对于文件使用方式有以下几点说明:


  1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:


  r(read): 读
  w(write): 写
  a(append): 追加
  t(text): 文本文件,可省略不写
  b(banary): 二进制文件
  +: 读和写


  2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。


  3. 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。


  4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。


  5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
 
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针
(NULL)。由此可判断文件打开是否成功。
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    // 开始文件中的内容为aaaaaaaaa
    FILE * fp = fopen("a.txt","r+");
    if (fp == NULL) {
        cerr << "file error" << endl;
        exit(1);
    }
 
    fseek(fp, 2, SEEK_SET);
    fwrite("ddd", 1, 2, fp);
 
    fclose(fp);
 
    return 0;
 
}






展开阅读全文

大侠:c语言修改文件出错,求解!!

01-10

[size=18px]求大侠告诉我该怎么改!!!![/size][color=#FF0000][/color]rnrn[color=#0000FF]1.程序思路:rn 先从文本文件test中读出内容,放到char tmp[200]中;rn 读的过程,遇到“name=apple”时,不将它放入tmp[200]中,而是换成“name=banana”;rn 最后再将tmp[200]的内容写入文本文件test.[/color]rnrn2.程序:(程序代码见下,运行在linux下)rn#define _GNU_SOURCErn#include rn#include rn#include rn#define txtfile "test"rnint main()rnrn FILE *fp, *fp2; char tmp[200];char *line; size_t len; int ret;rnrn //read content form txtfile;rn fp=fopen(txtfile,"r");rn if(fp == NULL)perror(txtfile);exit(EXIT_FAILURE);rn while ((read = getline(&line, &len, fp)) != -1) rn if(line=="\n")continue;rn if(strstr(line,"name=apple"))rn strcat(tmp,"name=banana");rn elsern strcat(tmp,line);rn strcat(tmp,"\n");rn rn fclose(fp);rnrn //write content from tmp back to txtfile;rn fp2 = fopen(txtfile, "w");rn if(fp == NULL)perror(txtfile);exit(EXIT_FAILURE);rn ret=fputs(tmp,fp);rn if(ret<0||ret==EOF)rn printf("Write error!\n");rn fclose(fp2);rnrn return 0;rnrnrn[color=#0000FF]3.文本文件test中的内容:rnsort=fruits;rnname=applernprice=4[/color]rnrn4.执行时出现错误:rn[apples@dnisw3 test]$ ./a.out rn*** glibc detected *** ./a.out: realloc(): invalid pointer: 0x008acfc0 ***rn======= Backtrace: =========rn/lib/i686/nosegneg/libc.so.6(realloc+0x3ab)[0x91e84b]rn/lib/i686/nosegneg/libc.so.6[0x91e991]rn/lib/i686/nosegneg/libc.so.6(realloc+0x3c)[0x91e4dc]rn/lib/i686/nosegneg/libc.so.6(getdelim+0x16a)[0x90b4ca]rn/lib/i686/nosegneg/libc.so.6(getline+0x33)[0x9088c3]rn./a.out[0x80485ef]rn/lib/i686/nosegneg/libc.so.6(__libc_start_main+0xdc)[0x8c9f2c]rn./a.out[0x8048461]rn======= Memory map: ========rn00893000-008ac000 r-xp 00000000 08:01 7997060 /lib/ld-2.5.sorn008ac000-008ad000 r--p 00018000 08:01 7997060 /lib/ld-2.5.sorn008ad000-008ae000 rw-p 00019000 08:01 7997060 /lib/ld-2.5.sorn008b4000-009ef000 r-xp 00000000 08:01 7997061 /lib/i686/nosegneg/libc-2.5.sorn009ef000-009f1000 r--p 0013a000 08:01 7997061 /lib/i686/nosegneg/libc-2.5.sorn009f1000-009f2000 rw-p 0013c000 08:01 7997061 /lib/i686/nosegneg/libc-2.5.sorn009f2000-009f5000 rw-p 009f2000 00:00 0 rn00a98000-00a99000 r-xp 00a98000 00:00 0 [vdso]rn00c9e000-00ca9000 r-xp 00000000 08:01 7997070 /lib/libgcc_s-4.1.1-20061011.so.1rn00ca9000-00caa000 rw-p 0000a000 08:01 7997070 /lib/libgcc_s-4.1.1-20061011.so.1rn08048000-08049000 r-xp 00000000 08:03 24414215 /home/apples/test/a.outrn08049000-0804a000 rw-p 00000000 08:03 24414215 /home/apples/test/a.outrn0903c000-0905d000 rw-p 0903c000 00:00 0 rnb7ef1000-b7ef2000 rw-p b7ef1000 00:00 0 rnb7f0d000-b7f0f000 rw-p b7f0d000 00:00 0 rnbfd49000-bfd5f000 rw-p bfd49000 00:00 0 [stack]rnAbortedrnrn 论坛

没有更多推荐了,返回首页