求c语言读取写入文本文件的函数实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求c语言读取写入文本文件的函数实现相关的知识,希望对你有一定的参考价值。

小弟不懂c/c++开发,现在需要实现这么个功能提供给外部程序调用,请大侠帮忙实现,不胜感激
myfile.h
extern "C" _declspec(dllexport) int FileCreate(char *filePath,char *fileContext);
extern "C" _declspec(dllexport) char* FileRead(char *filePath);

myfile.cpp
//创建文件 成功返回0 失败返回1
//filePath文件路径 比如c:/myfile.txt
//fileContext文件内容 比如 测试写入abc123,也可以没有中文字符
int FileCreate(char *filePath,char *fileContext)



//读取文件 成功返回文件内容 失败返回空字符串
//filePath文件路径 比如c:/myfile.txt
char* FileRead(char *filePath)



上面的代码不一定正确,但意思应该表达清楚了,我这边的环境是vs2010建的win32 dll,麻烦贴完整的代码包括要引用哪些头文件,再次感谢
方便的话也可以上 csdn 回答
//bbs.csdn.net/topics/390696105?page=1#post-396617198

C语言标准库提供了一系列文件I/O函数用于文件操作,比如fopen()用于打开文件、fread()、fwrite()用于读写文件、fseek()用于设置操作位置等等,一般C语言教程上都有文件I/O一章,细致内容,可以找本教科书学习一下。 下面的示例,是向名为1.txt的文件附加hello world字符串。
#include <stdio.h>
#include <string.h>
int main()

FILE *fp = fopen("1.txt", "a+");
if (fp==0)

printf("can't open file\n");
return 0;

fseek(fp, 0, SEEK_END);
char sz_add[] = "hello world\n";
fwrite(sz_add, strlen(sz_add), 1, fp);
fclose(fp);
return 0;




#include<stdio.h>
struct stu

char name[10];
int num;
int age;
char addr[15];
boya[2],boyb[2],*pp,*qq;
main()
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
printf("Cannot open file strike any key exit!");
getch();
exit(1);

printf("\ninput data\n");
for(i=0;i<2;i++,pp++)
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
for(i=0;i<2;i++,pp++)
fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp->addr);
rewind(fp);
for(i=0;i<2;i++,qq++)
fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr);
printf("\n\nname\tnumber age addr\n");
qq=boyb;
for(i=0;i<2;i++,qq++)
printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age,qq->addr);
fclose(fp);
参考技术A #include <stdio.h>
#include <string.h>    //strlen()
#include <malloc.h>  //malloc()
int FileCreate(char *filePath,char *fileContext)

 FILE* fp;
 fp=fopen(filePath,"w+");
 if(fp)
 
  fwrite(fileContext,strlen(fileContext),1,fp);
  fclose(fp);
  return 0;
 
 return 1;

char* FileRead(char *filePath)
 
 FILE* fp; 
 long int fsize;
 char* fileContext;
 fp=fopen(filePath,"r");
 if(fp)
 
  fseek(fp,0,SEEK_END);
  fsize=ftell(fp);
  rewind(fp);
  fileContext=(char*)malloc(fsize+1);   //注意释放内存
  fread(fileContext,fsize,1,fp);
  *(fileContext+fsize)='\\0';
  fclose(fp);
  return fileContext; 
 
 return NULL;
 

int main()      //测试

 char* fileContext;
 char* filePath="d:\\\\111.txt";
 FileCreate(filePath,"abc123");
 fileContext=FileRead(filePath);
 printf("%s",fileContext);
 free(fileContext);  //释放
 return 0;

本回答被提问者和网友采纳

C语言将数据写入文件,读取出现二次读取

出现的问题就在我画红线的地方。
*****以写的方式保存数据到文件的函数【原数据将被覆盖】*****/
int save(int n) //保存函数,保存n个记录

FILE *fp;
int i;
if((fp=fopen("zhouhao.txt","wb"))==NULL)//以二进制写的方式打开,在此前的记录被覆盖

printf("无法打开文件!\n任意键退出程序... ...\n");
getch(); //预防闪屏
return 0;

for(i=0;i<n;i++)
if(per[i].f_num!=0) //在后面的del()函数中通过将stu[i].ave=0来表示该记录被删除了
if(fwrite(&per[i],sizeof(struct person),1,fp)!=1)//开始写入文件
printf("文件写入发生错误\n");
fclose(fp);
return 0; // 注意下这个地方 ,我只是随便赋的值,只是为了消除一个警告

/***【加载记录或可以计算记录个数的函数】***/
int load()

FILE *fp;
int i;
if((fp=fopen("zhouhao.txt","rb"))==NULL) //以二进制读的方式打开

printf("无法打开文件!\n任意键退出程序... ...\n"); //显示不能打开文件的信息
getch(); //预防闪屏
return 0;

for(i=0;!feof(fp);i++)
fread(&per[i],sizeof(struct person),1,fp); //将文件数据读入学生结构体
fclose(fp);
return(i-1); //返回目前总的记录个数,注意是i-1

大神给点建议,是哪儿出现问题了,如果要源程序的话我也可以共享!
person结构体
typedef struct person

char number[4]; //序号
char ymd[10]; //来访日期
char v_name[10]; //来访人姓名
char cre_name[10]; //来访人证件名
char c_num[18]; //来访人证件编号
char bv_name[10]; //被访人姓名
double f_num; //被访人楼号
char hm_start[5]; //来访时间
char hm_leave[5]; //离开时间
char desc[20]; //备注
PER;
PER per[N]; //定义一个外部结构体变量

不要用feof在循环里判断,在读到文件最后一个字节时,feof(fp)还是为0值,再试图读文件时,feof(fp)才为非0值来报错,所以会多读一次
用fread的返回结果判断就行了,0就是没数据了

for(i=0;!feof(fp);i++)
    fread(&per[i],sizeof(struct person),1,fp);
改成
i=0;
while (fread(&per[i],sizeof(struct person),1,fp))
    i++;追问

还是不行哎。。大哥,改完以后还是输出这个结果。。。

追答

return(i-1); //返回目前总的记录个数,注意是i-1
不用-1了,直接return i

追问

大哥,不行的,

参考技术A 提供一下你的person结构体,估计变量定义有问题追问

我把person结构体补充到上面了,这边写不下。。。麻烦您咯。。

追答

char ymd[10]; //来访日期 你存储的数据如果是2014/07/02则说明有效数据是10个,而作为一个字符串,应该还要有一位结束符位('\0'),因此,应该改为char ymd[11]; //来访日期,比有效数据多一个才好!
其他地方的字符串也要注意这个问题。
祝进步

追问

大哥还是不对啊,我都改了,依旧是原来的样子

追答

重新保存你的数据文件,再重新读数据才可以!

追问

谢谢咯,还是不行

追答

共享完整代码,你这程序就这两个问题,一个是楼下说的多读了一行空数据,所以出现了2和NULL
另一个,就是你变量定义的问题,导致输出的日期后面有附加数据。

以上是关于求c语言读取写入文本文件的函数实现的主要内容,如果未能解决你的问题,请参考以下文章

关于C语言中文本文件的逐行读取的实现

C基础文件操作

C基础文件操作

C基础文件操作

c语言 如何读取中文字符串

c语言,数据能写入文件,但是从文件读取数据的时候,出现了乱码,如下代码,求解答