Linux c 從文件當中讀取任意一行的數據


代碼如下

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <fcntl.h>
#define FILEBUFFER_LENGTH 5000
#define EMPTY_STR "

//打開fileName指定的文件,從中讀取第lineNumber行
//返回值:成功返回1,失敗返回0
int get_file_line(char *result,char *fileName,int lineNumber)
{
    FILE *filePointer;
    int i=0;
    char buffer[FILEBUFFER_LENGTH];
    char *temp;

    memset(buffer,'\0',FILEBUFFER_LENGTH*sizeof(char));
    strcpy(buffer,EMPTY_STR);

    if((fileName==NULL)||(result==NULL))
    {
        return 0;
    }

    if(!(filePointer=fopen(fileName,"rb")))
    {return 0;}


    while((!feof(filePointer))&&(i<lineNumber))
    {
        if(!fgets(buffer,FILEBUFFER_LENGTH,filePointer))
        {
            return 0;
        }
        i++;//差點又忘記加這一句了
    }

   /* printf("\n%d\n",sizeof(*result));
    if(strlen(buffer)>sizeof(*result))//不能夠這么寫,雖然fgets讀取一行后會在末尾加上'\0',但是sizeof(result)得到的結果卻是result本身類型的大小,所以不能夠這么算。當靜態數組傳入函數時,在函數內部只能知道它是一個指針
    {
        return 0;
    }*/




    if(0!=fclose(filePointer))
    {
        return 0;
    }

    if(0!=strcmp(buffer,EMPTY_STR))
    {
        while(NULL!=(temp=strstr(buffer,"\n")))
        {
            *temp='\0';
        }

        while(NULL!=(temp=strstr(buffer,"\r")))
        {
            *temp='\0';
        }


        strcpy(result,buffer);
    }else
    {
        strcpy(result,EMPTY_STR);
        return 0;
    }

    return 1;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM