c语言下的文件操作函数

这段时间整理C语言的文件操作函数费了老大劲,太久没接触C语言,一开始写起来很不顺心,终于算是整理了一部分函数出来,可以告一段落了.

但是还有一点BUG,在对文件进行写入操作时,对于写入数据的长度如果大于写入字符串本身长度的话,这时候该文件的内容会多出一些莫名其妙的数据,希望遇到过此类问题的朋友告诉我原因.感激不尽!

以下是源码示例:

 

 

#include <stdio.h>
#include <stdlib.h>


//**************函数声明 *******************
int f_read(char *,long ,char * ,int);
/*
 功能:读文件
 参数:
    char *filename     要读的文件地址
    long pos         记录在文件中的偏移
    char *sdata      保存所读数据地址
    int len          要读取的数据长度
 返回值:
     读成功       0
     其他错误     1
*/

 

int f_exist(char *);
/*
 功能:判断文件是否存在
 参数:
    char *filename     要判断的文件名
 返回值:
         存在          0
        不存在         1
*/

 

int f_write(char *,int ,long ,char  *,int );
/*
 功能:写文件
 参数:
    char *filename     要进行写操作的文件名
    int mode   写模式
              1     追加
              0     改写
   long pos   记录在文件中的偏移,对模式  1 无效
   char *sdata  保存所读数据地址
   int len    写入的数据长度
 返回值:
           写成功       0
           其他错误      1
*/


//*******************函数定义 ***************
//入口函数
int main(int argc, char *argv[])
{
  //step1: 判断文件是否存在 ? 0:存在 ; 1:不存在
  int rel1=f_exist("ww.txt");
  printf("file exist ? : %d/n",rel1);
  char  data[255]={' '}; //初始化字符串数组为空
 
  //step2: 读取文件
  f_read("ww.txt",0,data,255);
  printf("read file : %s/n",data);
 
  //step3: 写入文件
  f_write("ww.txt",0,0,"This is a test file.",strlen("This is a test file."));
  printf("after writing .../n");
  //step4: 读取文件
  f_read("ww.txt",0,data,255);
  printf("read file : %s/n",data);
  system("PAUSE"); 
  return 0;
}

 

//写文件
int f_write(char *filename,int mode,long  pos,char  *sdata,int  len)
{
    FILE * fp ;
    int i=0;
    if(mode==0)
    {
    fp = fopen(filename, "wt");
    while (i<len+pos)
       {
           if(i>=pos)
              fputc(*sdata++,fp);
           else
              fputc(' ',fp);
           i++;
       }
    }
 else if(mode==1)
 {
    fp = fopen(filename, "at");
    while (i<len)
       {
           fputc(*sdata++,fp);
           i++;
       }
    }
    else
    {
       return 1;
    }
    fclose(fp); 
    return 0; 
}

 

//判断文件是否存在
int f_exist(char *filename)
{
   FILE * fp = fopen(filename, "rb"); 
   if (fp==NULL)  
   {   
       return 1;  
   }
   else
   {
       fclose(fp); 
      return 0;
   }
}

 

//读文件 
int f_read(char *filename,long pos,char *sdata,int len)
{
   FILE * fp = fopen(filename, "rt");
   if(fp==NULL)
   {
      return 1;
   }
   char ch=fgetc(fp);
   if(ch==EOF)
   {
      return 1;
   }
   int i=0;
   while (i<len+pos)
   {
      if(i>=pos)
      *sdata++=ch;
      ch=fgetc(fp);
      i++;
   }
   fclose(fp); 
   return 0;
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值