C語言文件讀寫方法

[TOC]

fwrite

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

  • ptr:指向保存數(shù)據(jù)的指針;
  • size:每個數(shù)據(jù)類型的大小
  • count:數(shù)據(jù)的個數(shù)
  • stream:文件指針
  • return 函數(shù)返回寫入數(shù)據(jù)的個數(shù)
int write(const char *path) {
    FILE *file = fopen(path, "wb");
    if (file == NULL) {
        return 0;
    }
    int arr[4] = {0x00000012, 0x00001234, 0x00123456, 0x12345678};
    for (int i = 0; i < 4; i++) {
        fwrite(&arr[i], sizeof(int), 1, file);
    }
    fclose(file);
    return 1;
}

查看輸出的文件俄认,看到數(shù)據(jù)的存儲是小端對齊


1.png

w wb的區(qū)別

wb 打開或新建一個二進制文件寇荧,在POSIX系統(tǒng),包括Linux都會忽略該字符。windows文本文件打開時寫入\n,會自動加上\r變成\r\n。而已二進制方式打開則不會加上\r摇邦。

int write(const char *path) {
    FILE *file = fopen(path, "wb+");
//    FILE *file = fopen(path, "w");
    if (file == NULL) {
        return 0;
    }
    char *p = "abc\n1234";
    int len = fwrite(p, sizeof(char), strlen(p), file);
    printf("write len=%d\n", len);
    fclose(file);
    return 1;
}

使用wb+時候結(jié)果為:

write len=8
-------------
abc
12341234
read  length=8

使用w打開時恤煞,結(jié)果為:

write len=8
-------------
abc
1234123
read  length=9

fread

int read(const char *path) {
    FILE *file = fopen(path, "rb");
    if (file == NULL) {
        return 0;
    }
    int len = 0;
    int total = 0;
    char buf[5] = {0};
    while (!feof(file)) {
        len = fread(buf, sizeof(char), 4, file);
        printf("%s", buf, len);
        total += len;
    }
    printf("\nread  length=%d", total);
    fclose(file);
    return 1;
}

注意:fread返回成功有效的讀取的item元素的個數(shù)。

這里修改寫下代碼:

#include <stdio.h>
#include <mem.h>

char *PATH1 = "D:\\code\\CProject\\FileByte\\1";

int read(const char *);

int write(const char *);

int main() {
    write(PATH1);
    printf("-------------\n");
    read(PATH1);
    return 0;
}

int write(const char *path) {
//    FILE *file = fopen(path, "wb+");
    FILE *file = fopen(path, "w");
    if (file == NULL) {
        return 0;
    }
    char *p = "abc\n1234";
    int len = fwrite(p, sizeof(char), strlen(p), file);
    printf("write len=%d\n", len);
    fclose(file);
    return 1;
}

int read(const char *path) {
    FILE *file = fopen(path, "rb");
    if (file == NULL) {
        return 0;
    }
    int len = 0;
    int total = 0;
    //使用short
    short buf[20] = {0};
    while (!feof(file)) {
        len = fread(buf, sizeof(short), 20, file);
        for (int i = 0; i < len + 2; i++) {
            printf("%x-", buf[i]);
        }
        total += len;
    }
    printf("\nread  length=%d", total);
    fclose(file);
    return 1;
}

結(jié)果為:

write len=8
-------------
6261-d63-310a-3332-34-0-
read  length=4

總共9個字節(jié)涎嚼,而實際有效讀入了4個short阱州。


2.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市法梯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌犀概,老刑警劉巖立哑,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姻灶,居然都是意外死亡铛绰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門产喉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捂掰,“玉大人,你說我怎么就攤上這事曾沈≌庀” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵塞俱,是天一觀的道長姐帚。 經(jīng)常有香客問我,道長障涯,這世上最難降的妖魔是什么罐旗? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮唯蝶,結(jié)果婚禮上九秀,老公的妹妹穿的比我還像新娘。我一直安慰自己粘我,他們只是感情好鼓蜒,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涂滴,像睡著了一般友酱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柔纵,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天缔杉,我揣著相機與錄音,去河邊找鬼搁料。 笑死或详,一個胖子當著我的面吹牛系羞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霸琴,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椒振,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了梧乘?” 一聲冷哼從身側(cè)響起澎迎,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎选调,沒想到半個月后夹供,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡仁堪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年哮洽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弦聂。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸟辅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莺葫,到底是詐尸還是另有隱情匪凉,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布徙融,位于F島的核電站洒缀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏欺冀。R本人自食惡果不足惜树绩,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隐轩。 院中可真熱鬧饺饭,春花似錦、人聲如沸职车。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悴灵。三九已至扛芽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間积瞒,已是汗流浹背川尖。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茫孔,地道東北人叮喳。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓被芳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親馍悟。 傳聞我的和親對象是個殘疾皇子畔濒,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 簡介 C/C++中可以使用以fopen、fclose為代表的文件操作函數(shù)對文件進行讀寫锣咒。 注:本文在Linux平臺...
    decoding閱讀 559評論 0 1
  • ^函數(shù)重載的匹配: 當函數(shù)名被重載后侵状,函數(shù)的匹配過程:首先尋找能精確匹配的函數(shù),如果未能精確匹配毅整,則嘗試...
    魯大帥閱讀 1,016評論 0 1
  • Linux(C/C++)下的文件操作open毛嫉、fopen與freopen open是linux下的底層系統(tǒng)調(diào)用函數(shù)...
    木兮or涼城閱讀 4,867評論 0 1
  • 文件操作 (Linux文件操作)) [文件|目錄] Linux文件操作:為了對文件和目錄進程處理,你需要用到系統(tǒng)...
    JamesPeng閱讀 1,466評論 1 5
  • C/C++輸入輸出流總結(jié) 前兩天寫C++實習作業(yè)妇菱,突然發(fā)現(xiàn)I/O是那么的陌生承粤,打了好長時間的文件都沒有打開,今天終...
    LuckTime閱讀 1,731評論 0 6