第1个回答 2007-10-29
查找你所指定目标文件中,包含关键字的部分,并保存到C盘下的record.txt文件内。
#include<stdio.h>
#include<string.h>
#define MAXLEN 81
int main()
{
char file_name[10];
char temp[10];
printf("输入要读取的文件名称(如c:\\sys.txt):");
scanf("%s",file_name);
printf("输入要查找的关键字:");
scanf("%s",temp);
FILE *fp;
if((fp=fopen(file_name,"r"))==NULL)
{
printf("不能打开文件");
return 0;
}
FILE *fp2;
fp2=fopen("c:\\record.txt","w");
char buffer[MAXLEN];
while(fgets(buffer,MAXLEN,fp)!=NULL)
{
printf("OK\n");
char *p;
p=strstr(buffer,temp);
printf("%s",p);
fputs(p,fp2);
}
printf("记录完毕!\n");
fclose(fp);
fclose(fp2);
}
第2个回答 2007-10-29
include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char fname[256];
char c;
printf("请输入文件名:");
scanf("%s",fname);
if((fp=fopen(fname,"r+"))==NULL)
{
printf("文件打开失败!\n\n");
system("PAUSE");
return 1;
}
while((c=fgetc(fp))!=EOF)
{
if(c=='.')
{
fseek(fp,0,1);/*文件由读操作到写操作*/
fprintf(fp,"A");
fseek(fp,0,1);/*文件由写操作到读操作*/
}
}
fclose(fp);
}
第3个回答 2007-10-29
#include <stdio.h>
#define BUFF_SIZE 100
#define OK 1
#define ERROR 0
//
//函数参数主要对应库函数fread
//buff--读取结果的存放位置
//unit_len--读取单元的字节长度
//data_len--总共读取的单元个数
//
int readFile(char* fn, char* buff, unsigned int unit_len, unsigned int data_len)
{
FILE *fp;
if( !(fp=fopen(fn,"rb"))) //以二进制只读方式打开文件
{
printf("Error open file %s !", fn);
return ERROR;
}
int i=0;
unsigned int read_units = 0;
while( !feof(fp) )
{
if (read_units=fread(buff,unit_len,data_len,fp))
{
i++;
printf("%d %d units(%d bytes).\n",i,read_units, unit_len);
}
}
fclose(fp);
if(!i)
{
printf("read NOTHING from file %s !\n", fn);
return ERROR;
}
return OK;
}
//参数解释,同上
int writeFile(char* fn, char* buff, unsigned int unit_len, unsigned int data_len)
{
FILE *fp;
if( !(fp=fopen(fn,"wb")))
{
printf("Error open file %s !\n", fn);
return ERROR;
}
unsigned int written_len = 0;
if (written_len=fwrite(buff,unit_len,data_len,fp)) {
printf("has written %d units.\n",written_len);
}
fclose(fp);
if(!written_len)
{
printf("write NOTHING to file %s !\n", fn);
return ERROR;
}
return OK;
}
int main(void)
{
//字符读写缓冲
char buff_char[BUFF_SIZE+1];
buff_char[BUFF_SIZE] = '\0';
//整数读写缓冲
int buff_int=0;
//浮点数读写缓冲
double buff_double=0.0;
//读取示例
if(ERROR == readFile("E:\\test.dat", buff_char, sizeof(char), BUFF_SIZE))
return 1;
if(ERROR == readFile("E:\\test.dat", (char*)&buff_int, sizeof(int), 1))
return 1;
if(ERROR == readFile("E:\\test.dat", (char*)&buff_double, sizeof(double), 1))
return 1;
//修改后写入示例
if(ERROR == writeFile("E:\\test_w.dat", buff_char, sizeof(char), BUFF_SIZE/2)) //写读入数据的一半
return 1;
buff_int /= 2; //修改读入的数据
if(ERROR == writeFile("E:\\test_w.dat", (char*)&buff_int, sizeof(int), 1)) //
return 1;
buff_double *= 5;//修改读入的数据
if(ERROR == writeFile("E:\\test_w.dat", (char*)&buff_double, sizeof(double), 1)) //
return 1;
return 0;
}
第4个回答 推荐于2018-02-28
/****************************************
程序功能:读取c:\source.txt文件的内容,
取其中'#'开头行的内容写入c:\dest.txt中。
如:source.txt文件内容为如下:
#jksfjlsd
12jlkdjfsl
#jfiejw
#jkfldsl
iejfja;fj
则程序会产生一个dest.txt文件内容如下:
#jksfjlsd
#jfiejw
#jkfldsl
****************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp1;
FILE *fp2; //申明2个文件指针,一个打开源文件,一个打开目标文件
char buf[1024]; //申明一个大字符数组,用于保存文件每一个行的内容
//只读方式打开源文件,这里得用两个反斜杠转义字符
if( (fp1=fopen("c:\\source.txt","r"))==NULL )
{
printf("打开source.txt失败,可能文件还没有创建!");
exit(0);
}
//创建目标文件,这里一般不会发生错误
if( (fp2=fopen("c:\\dest.txt","w"))==NULL )
{
printf("创建dest.txt失败!");
fclose(fp1);
exit(0);
}
while(!feof(fp1)) //当文件指针fp1指向文件末尾时,feof返回0,否则返回1,该句作用是只要未到末尾则进入循环
{
memset(buf, 0, 1024); //buf字符串清0
fgets(buf, 1024, fp1); //从fp1文件当前指针读取一行内容到buf
if(buf[0]=='#') //判断该行的第一个字符是否为'#'
{
fputs(buf, fp2); //是'#',写内容到fp2文件
}
}
fclose(fp1);
fclose(fp2); //循环结束,关闭fp1,fp2文件,程序结束
return 0;
}本回答被提问者和网友采纳