发一个自己写的文件读写工具类。
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
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"); }
写个小程序测试一下:
#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; }
指针这里处理感觉还是有点别扭,有谁有更好的方法还请告知。
程序运行截图: