C语言文件操作

C对文件的操作

前言

提示:以下是本篇文章正文内容,下面案例可供参考

一、替代第几行的数据

char buf[1024][1024]; 
int replace_infile(char * file,int line,char * data)
{
    int i; 
    FILE *fp = fopen(file, "r");//读方式打开文件 
    for(i=0;i<10;i++)
    {
        fgets(buf[i], 32, fp);
    } 
    fclose(fp);//关闭文件 
    strcpy(buf[line-1], data);//插入到第8行。 
    fp=fopen(file, "w"); //写方式打开文件。 
    for(i = 0; i < 10; i ++)//写入所有处理后的数据 
    { 
        fputs(buf[i],fp); 
    } 
    fclose(fp);//关闭文件。 
    return 0; 
}

二、读取总行

int  read_line_main(char * testfile){
	int c,length;
	FILE *fp1; //打开文件
    fp1 = fopen(testfile, "r+");
	//打开文件,"r+"为访问模式:打开一个用于更新的文件,可读取也可写入。该文件必须存在。
    if(NULL == fp1)
    {
        printf("fopen failed!\n");
        exit(1);
    }
    //计算行数
    while((c = fgetc(fp1)) != EOF)
//C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。
    {
        if(c == '\n')//碰到换行符,则行数+1
        length++;
    }
    //printf("该文件中的行数为:%d\n", length);//输出文件中的行数
    fclose(fp1);//关闭文件
    return length;
}

三.读取对应行

int file_read_line()
{
        //读
     char buf[MAX_LINE];  /*缓冲区*/
     FILE *fp;            /*文件指针*/
     int len;             /*行字符个数*/

     //读
     if((fp = fopen("test.txt","r")) == NULL)
     {
     perror("fail to read");
     exit (1) ;
     }
     while(fgets(buf,MAX_LINE,fp) != NULL)
     {
     len = strlen(buf);
     buf[len-1] = '\0';  /*去掉换行符*/
     printf("%s %d \n",buf,len - 1);
     }
     return 0;
}

四.在某行后添加新行

int add_data_after(char * file,int line,char * data,int line_num)
{
    int i,j,l;
    FILE *fp = fopen(file, "r");//读方式打开文件
    char buf[504][1024];
    char newbuf[504][1024];

    if(line>line_num){
        return 0;
    }
    for(i=0;i<line_num;i++)
    {
         fgets(buf[i], 32, fp);
         strcpy(newbuf[i], buf[i]);// 
    }
    fclose(fp);//关闭文件 
    
    strcpy(newbuf[line-1], data);// 
    
    for(i=line;i<line_num;i++)
    {
         strcpy(newbuf[i], buf[i-1]);//插入到第8行。
    } 
    
    fp=fopen(file, "w"); //写方式打开文件。 
    for(i = 0; i < line_num+1; i ++)//写入所有处理后的数据 
    {
        fputs(newbuf[i],fp);
    }
    printf("inser ok\n");
    fclose(fp);//关闭文件。  
    return 0; 
}

五.在最后一行添加新行

int add_data_last_line(char * file,int line,char * data,int line_num)
{
    int i,j;
    FILE *fp = fopen(file, "r");//读方式打开文件
    char buf[504][1024];
    char newbuf[504][1024];

    if(line>line_num){
        return 0;
    }
    printf("\n\n");
    for(i=0;i<line_num;i++)
    {
         fgets(buf[i], 32, fp);
         //printf(" strlen  %d  buf %s",strlen(buf[i]),buf[i] );
        for(j=0;j<strlen(buf[i]);j++)
        {
            newbuf[i][j]= buf[i][j];
            printf(" %c",  newbuf[i][j]) ;
        }
    } 
    fclose(fp);//关闭文件 

    strcpy(newbuf[i], data);//插入到第8行。
    printf(" %s",  newbuf[i]);
    fp=fopen(file, "w"); //写方式打开文件。 
    for(i = 0; i < line_num+1; i ++)//写入所有处理后的数据 
    { 
        fputs(newbuf[i],fp); 
    }
    printf("inser ok\n");
    fclose(fp);//关闭文件。 
    
    return 0;

}

总结

提示:这里对文章进行总结:

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


#define MAX_LINE 1024
//答应对应行数据



int replace_infile(char * file,int line,char * data,int line_num)
{
    int i;
    FILE *fp = fopen(file, "r");//读方式打开文件
    char buf[1024][1024];

    if(line>line_num){
        return 0;
    }
    printf("line_num   %d\n",line_num);
    for(i=0;i<line_num;i++)
    {
         fgets(buf[i], 32, fp);
    }

    fclose(fp);//关闭文件

    strcpy(buf[line-1], data);//插入到第8行。

    fp=fopen(file, "w"); //写方式打开文件。

    for(i = 0; i < 10; i ++)//写入所有处理后的数据

    {

        fputs(buf[i],fp);

    }
    printf("inser ok\n");
    fclose(fp);//关闭文件。

    return 0;

}



int file_read_line(char * file,int line,int line_num)
{
        //读
     char buf[MAX_LINE];  /*缓冲区*/
     FILE *fp;            /*文件指针*/
     int len;             /*行字符个数*/
     int count=0;
     //读
     if(line>line_num){
        return 0;
     }

     if((fp = fopen(file,"r")) == NULL)
     {
        perror("fail to read");
        exit (1) ;
     }
     while(fgets(buf,MAX_LINE,fp) != NULL)
     {

         if(count==line-1){
             len = strlen(buf);
             buf[len-1] = '\0';  /*去掉换行符*/
             printf("\n line  %d data is  %s  \n",line,buf );
             break;
         }
         count++;
     }
     fclose(fp);//关闭文件。
     return 0;
}



int add_data_last_line(char * file,int line,char * data,int line_num)
{
    int i,j;
    FILE *fp = fopen(file, "r");//读方式打开文件
    char buf[504][1024];
    char newbuf[504][1024];

    if(line>line_num){
        return 0;
    }
    printf("\n\n");
    for(i=0;i<line_num;i++)
    {
         fgets(buf[i], 32, fp);
         //printf(" strlen  %d  buf %s",strlen(buf[i]),buf[i] );
        for(j=0;j<strlen(buf[i]);j++)
        {
            newbuf[i][j]= buf[i][j];
            printf(" %c",  newbuf[i][j]) ;
        }
    }

    fclose(fp);//关闭文件





    strcpy(newbuf[i], data);//插入到第8行。
    printf(" %s",  newbuf[i]);
    fp=fopen(file, "w"); //写方式打开文件。

    for(i = 0; i < line_num+1; i ++)//写入所有处理后的数据

    {

        fputs(newbuf[i],fp);

    }
    printf("inser ok\n");
    fclose(fp);//关闭文件。



    return 0;

}




int add_data_after(char * file,int line,char * data,int line_num)
{
    int i,j,l;
    FILE *fp = fopen(file, "r");//读方式打开文件
    char buf[504][1024];
    char newbuf[504][1024];

    if(line>line_num){
        return 0;
    }
    for(i=0;i<line_num;i++)
    {
         fgets(buf[i], 32, fp);
         strcpy(newbuf[i], buf[i]);//插入到第8行。
    }
    fclose(fp);//关闭文件


    strcpy(newbuf[line-1], data);//插入到第8行。



    for(i=line;i<line_num;i++)
    {
         strcpy(newbuf[i], buf[i-1]);//插入到第8行。
    }




    fp=fopen(file, "w"); //写方式打开文件。

    for(i = 0; i < line_num+1; i ++)//写入所有处理后的数据

    {
        fputs(newbuf[i],fp);
    }
    printf("inser ok\n");
    fclose(fp);//关闭文件。



    return 0;

}




//统计行数
int  read_line_main(char * testfile){
	int c,length;
	FILE *fp1; //打开文件
    fp1 = fopen(testfile, "r+");
	//打开文件,"r+"为访问模式:打开一个用于更新的文件,可读取也可写入。该文件必须存在。
    if(NULL == fp1)
    {
        printf("fopen failed!\n");
        exit(1);
    }
    //计算行数
    while((c = fgetc(fp1)) != EOF)
//C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。
    {
        if(c == '\n')//碰到换行符,则行数+1
        length++;
    }
    //printf("该文件中的行数为:%d\n", length);//输出文件中的行数
    fclose(fp1);//关闭文件
    return length;
}


int main(){

    file_read_line("my.txt",2,read_line_main("my.txt"));

    //replace_infile("my.txt",2,"11111\n",read_line_main("my.txt"));

    add_data_after("my.txt",2,"kkk\n",read_line_main("my.txt"));

    file_read_line("my.txt",3,read_line_main("my.txt"));

    return 0;
}






判断文本后缀

typedef enum
{
    FILE_TYPE_TIFF=0,
    FILE_TYPE_JPG,
    FILE_TYPE_PDF,
    FILE_TYPE_DO,
    FILE_TYPE_OTHER,
    
}FILE_TYPE;
int WIN_Judge_FileType(char *filename)
{
    const char *pFile;

    pFile = strrchr(filename, '.'); // 判断输入的文件名最后输出.的位置
    printf("请输入文件名称: %s \n",filename);
    if (pFile != NULL)
    { // 输入不为空
        if (strcmp(pFile, ".tiff") == 0)
        { // 判断.exe文件
            printf("FILE_TYPE_TIFF!\n");
            return FILE_TYPE_TIFF;
        }
        else if (strcmp(pFile, ".jpg") == 0)
        { // 判断.txt文件
            printf("FILE_TYPE_JPG\n");
            return FILE_TYPE_JPG;
        }
        else if (strcmp(pFile, ".pdf") == 0)
        { // 判断.txt文件
            printf("FILE_TYPE_PDF\n");
            return FILE_TYPE_PDF;
        }
        else if ((strcmp(pFile, ".doc") == 0) || (strcmp(pFile, ".docx") == 0) || (strcmp(pFile, ".xls") == 0) || (strcmp(pFile, ".xlsx") == 0)|| \
		(strcmp(pFile, ".ppt") == 0)||  (strcmp(pFile, ".pptx") == 0) )
        { // 判断.txt文件
            printf("FILE_TYPE_DO\n");
            return FILE_TYPE_DO;
        }
	else
        {
            printf("FILE_TYPE_OTHER\n");
            return FILE_TYPE_OTHER;
        }
    }
    printf("pFile is NULL) FILE_TYPE_OTHER\n");
    return FILE_TYPE_OTHER;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值