Linux C - fopen、fclose

 常用開檔方式


開啟用法


    FILE *fp;
    fp = fopen("/file_path/name.txt", "r");
    fclose(fp);

"r":唯讀
"a+":附加在檔案後面
"w":寫入


內容讀取


    char buf[512];    
    int len, val;
    len = fgets(buf, sizeof(buf), fp); // 讀整行
    len = fread(buf, 1, sizeof(buf), fp); // 讀固定長度
    fscanf(fp, "%s %*s %d", buf, &val); // 格式化讀取

%*s 代表略過這個欄位

範例 1:

    FILE *fp;
    char buf[512];
    if((fp = fopen("/file_path/name.txt", "r"))) {
        while(fgets(buf, sizeof(buf), fp)) {
            printf("%s", buf);
        }
        fclose(fp);
    }

範例 2:


    FILE *fp;
    char buf[512];
    size_t len;
    if((fp = fopen("/file_path/name.txt", "r"))) {
        while((len = fread(buf, 1, sizeof(buf), fp)) > 0) {
            printf("%.*s", len, buf);
        }
        fclose(fp);
    }

註: sizeof(buf) 和 1 在某些平台,不能交換使用,會讀取不正確


範例 3:

FILE *fp;
char buf[512];
int val = 0; // 要記得給預設值,不然抓不到值,就會是沒初始化的亂數
memset(buf, '\0', sizeof(buf)); // val一樣,初始化
if((fp = fopen("/file_path/name.txt", "r"))) {
fscanf(fp, "%s %d", buf, &val);
printf("%s, %d", buf, val);
fclose(fp);
}


內容寫入


    fprintf(fp, "%s %d\n", buf, val); // 格式化寫入
    fwrite(buf, 1, sizeof(buf), fp); // 寫固定長度



讀寫位置變更


    fseek(fp, SEEK_SET, 2);

SEEK_SET:移動到,從頭算起 +2 B
SEEK_CUR:移動到,從目前位置算起 +2 B
SEEK_END:移動到,從尾算起 -2 B
(當然也可以把 2 改為 -2)














沒有留言:

張貼留言