2015年4月27日 星期一

fopen的開檔,讀檔與寫檔

開檔,讀檔,寫檔在資訊科學這門課程是相當基礎的資料處理,

但是假使平常比較不常做這些處理,當要你作的時候,真的是很要人命

因此作一些筆記是必要的,到時候要處理檔案的時候,就可以很快上手了

這邊分三部分來作筆記,分別為讀檔,寫檔,讀檔並寫檔

===========================================================
首先是讀檔的部分:

讀檔和寫檔是較為簡單的部分,讀檔的話基本上第一步先對檔案作fopen

接著只要使用fgets,這支C函式可以幫你把檔案一行一行的讀出來,fgets也會在每一行讀到結
尾"\n"時幫你把檔案指標指到下一行的起始

簡單的範例如下:
///////////// Read_File.c////////////////////
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define PATH "/etc/login.info"

int main()
{
    FILE *fptr;
    char login_info[128];

    if ((fptr = fopen(PATH, "r")) == NULL)
    {
                printf("open_file_error");
                exit(1);
     }
   
     while(fgets(login_info, 128, fptr) != NULL)
     {
                //fgets會把每一行資訊copy到login_info字元陣列
                //此處油開發者自行決定要對讀出的內容作甚麼處理
                //寫檔則再搭配使用 fwrite(buffer,1,sizeof(buffer),fptr);
      }
      fclose(fptr);
      return 1;
}
///////////////////////////////////////////////////////////////////////

fopen的第二個參數,用法請參考下圖:




接著是讀檔並且同時寫檔,作者這邊就只作一些重點整理了

首先也是對檔案作fopen,後面參數就請填上"r+"

接著以下這幾個function的使用就是讀檔並同時寫檔的重點

**********************************************
int ftell(FILE *fptr);
==>這支function可以取到目前fptr所offset的位置

舉個例子有個login.info的檔案內容如下:
username:admin
password:1234

那我用fptr=fopen("login.info", "r+")之後再搭配fget一次之後去作ftell(fptr)會等於15
也就是此時指標的位置會是在第二行一開頭
******************************************************

******************************************************
第二個重要的是
rewind(FILE *fptr);
==>這支function可以把fptr指標移到最前頭
*******************************************************

**************************************************
最後一個是
fseek(FILE *fptr, int offset, SEEK_SET);
==>此fuction可以幫你把fptr的指標位置移到你想要開始的地方

接著你可以作fprintf(fptr, " "); 你就可以修改你想改寫的部分了
******************************************************


沒有留言:

張貼留言