1. 程式人生 > 其它 >C++讀寫二進位制檔案

C++讀寫二進位制檔案


方法一:

#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>

//

  size_t readBinaryFile(const char *filename, unsigned char *&data)
  {
    FILE *fp;
    fopen_s(&fp, filename, "rb");
    if (fp == NULL)
    {
      return 0; //空指標則返回0,檔案開啟失敗
    }
    fseek(fp, 
0, SEEK_END); //將檔案指標移動至檔案末尾 size_t size = ftell(fp); //計算檔案大小,單位:Byte fseek(fp, 0, SEEK_SET); //把檔案指標移回初始位置(檔案開頭) data = (unsigned char *)malloc(sizeof(unsigned char) * size); fread(data, size, 1, fp); fclose(fp); return size; } size_t readBinaryFile(const char *filename, char
*&data) { FILE *fp; fopen_s(&fp, filename, "rb"); if (fp == NULL) { return 0; //空指標則返回0,檔案開啟失敗 } fseek(fp, 0, SEEK_END); //將檔案指標移動至檔案末尾 size_t size = ftell(fp); //計算檔案大小,單位:Byte fseek(fp, 0, SEEK_SET); //把檔案指標移回初始位置(檔案開頭) data = (char *)malloc(sizeof(char) * size); fread(data, size,
1, fp); fclose(fp); return size; } size_t writeBinaryFile(const char *filename, const unsigned char *data, size_t size) { FILE *fp; fopen_s(&fp, filename, "wb"); if (fp == NULL) { return 0; } size_t written_size = fwrite(data, size, 1, fp); fclose(fp); return written_size; } size_t writeBinaryFile(const char *filename, const char *data, size_t size) { FILE *fp; fopen_s(&fp, filename, "wb"); if (fp == NULL) { return 0; } size_t written_size = fwrite(data, size, 1, fp); fclose(fp); return written_size; }


方法二:

#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>

  template <typename OB>
  inline void saveObject(const char *filename, OB &object) //傳入要儲存的物件引用
  {
    std::ofstream osm(filename, ios::out | ios::binary);
    osm.write((const char *)&object, sizeof(OB));
    osm.close();
  }

  template <typename OB>
  inline void readObject(const char *filename, OB *object) //傳入讀取之後物件儲存的指標
  {
    std::ifstream ism(filename, ios::in | ios::binary);
    ism.read((char *)object, sizeof(OB));
    ism.close();
  }


//