C语言文件读写工具类

发一个自己写的文件读写工具类。

FileUtil.h

//
// Created by gj21798 on 2018/6/11.
//

#ifndef CBASIC_FILEUTIL_H
#define CBASIC_FILEUTIL_H

#include <unistd.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool isFileExists(const char *filename);

unsigned int getFileSize(const char *filename);

unsigned char * readFile(const char* filename);

unsigned char *loadIntoBuffer(const char *filename, unsigned int len);

void printBufferWithHex(const unsigned char *buf, unsigned int len);

#endif //CBASIC_FILEUTIL_H
View Code

FileUtil.c

//
// Created by gj21798 on 2018/6/11.
//

#include "FileUtil.h"

#define BUF_SIZE 1024

unsigned char * readFile(const char* filename) {
    unsigned char *p = NULL;
    if (isFileExists(filename)) {
        unsigned int fileSize = getFileSize(filename);
        printf("fileSize: %d\n", fileSize);

        p = loadIntoBuffer(filename, fileSize);
        if (p != NULL) {
            printBufferWithHex(p, fileSize);
        }
    }
    return p;
}

bool isFileExists(const char *filename) {
    return access(filename, F_OK) != -1;
}

unsigned int getFileSize(const char *filename) {
    struct stat stat_buf;
    stat(filename, &stat_buf);
    unsigned int len = (unsigned int) stat_buf.st_size;
    return len;
}

unsigned char *loadIntoBuffer(const char *filename, unsigned int len) {
    unsigned char *p = (unsigned char *) calloc(1, len+1);
    if (p == NULL) {
        return NULL;
    }

    FILE *file;
    file = fopen(filename, "r");
    if (file == NULL) {
        return NULL;
    }

    int total = 0;
    size_t rc = 0;
    while ((rc = fread(p + total, sizeof(unsigned char), BUF_SIZE, file)) != 0) {
        total += rc;
    }

    fclose(file);

    return p;
}

void printBufferWithHex(const unsigned char *buf, unsigned int len) {
    if (len <= 0) {
        return;
    }

    printf("%08X\t", 0);
    for (int i = 0; i < len; i++) {
        printf("%02X ", *(buf + i));
        if ((i + 1) % 0x10 == 0) {
            printf("\n%08X\t", i + 1);
        }
    }
    printf("\n");
}
View Code

写个小程序测试一下:

#include "basic/FileUtil.h"

int main(int argc, char **argv) {
    char *filename = "D:\\C_Programs\\test.c";
    unsigned char *p = readFile(filename);
    if (!p) {
        fprintf(stderr, "Cannot open file: %s", filename);
        return -1;
    }
    unsigned char*n = p;
    while (*n != NULL) {
        printf("%c", *(n++));
    }

    free(p);

    return 0;
}

指针这里处理感觉还是有点别扭,有谁有更好的方法还请告知。

程序运行截图:

猜你喜欢

转载自www.cnblogs.com/areful/p/11324844.html