求标准C语言读写文件的源代码

求一段用标准C编写的读写文件的代码,要求读取一个文件中的内容(截取一部分或主要信息)写入另外一个文件,并保存.一定要是标准C啊,如果正确的话我会追加分的
能给标注一下吗,有的地方看不懂哈

C语言读写文件 都是三个步骤

1.获取文件描述符

2.对文件读写

3.关闭文件

对文件读操作

//获取文件指针
FILE *pFile = fopen("1.txt","w"); // 文件打开方式 如果原来有内容也会销毁//向文件写数据
fwrite ("hello", //要输入的文字
         1,//文字每一项的大小 以为这里是字符型的 就设置为1 如果是汉字就设置为4
         strlog("hello"), //单元个数 我们也可以直接写5
         pFile //我们刚刚获得到的地址
         );
//fclose(pFile); //告诉系统我们文件写完了数据更新,但是我们要要重新打开才能在写
fflush(pFile); //数据刷新 数据立即更新

对文件写操作

FILE *pFile=fopen("1.txt","r"); //获取文件的指针
char *pBuf;  //定义文件指针
fseek(pFile,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度
int len=ftell(pFile); //获取文件长度
pBuf=new char[len+1]; //定义数组长度
rewind(pFile); //把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错
fread(pBuf,1,len,pFile); //读文件
pBuf[len]=0; //把读到的文件最后一位 写为0 要不然系统会一直寻找到0后才结束
MessageBox(pBuf);  //显示读到的数据
fclose(pFile); // 关闭文件

温馨提示:答案为网友推荐,仅供参考
第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;
}本回答被提问者和网友采纳
相似回答