簡體   English   中英

追加和讀取二進制文件

[英]Appending and reading binary file

我對我在代碼中的錯誤之處感到困惑。 輸出不是1,2,3,而是1,1,1。 關於我可以做什么的任何建議? 我猜我的錯誤可能是在寫入數據中,還是在使用變量值時。

class Binary
{
 public:
   Binary(int num);
  ~Binary();

  void createBinary();
  void writeBinary();
  void readBinary();

  string binFile;
  int value;
  fstream binaryFile;
};

Binary::Binary(int num)
{
 value = num;
 binFile = "BinaryFile.bin";
}

Binary::~Binary()
{
}

void Binary::createBinary()
{
  binaryFile.open(binFile, ios::out | ios::binary);
  binaryFile.close();
}

void Binary::writeBinary()
{
  if (!binaryFile) //if file does not exist
  {
    createBinary();
  }

  binaryFile.open(binFile, ios::app | ios::binary);
  binaryFile.write((char*)&value, sizeof(value));
  binaryFile.close();
}

void Binary::readBinary()
{

  binaryFile.open(binFile, ios::in |ios::binary);
  binaryFile.read((char*)&value, sizeof(value));
  binaryFile.close();

  cout << value << ", ";
}



int main()
{
  Binary num1(1);
  Binary num2(2);
  Binary num3(3);

  num1.writeBinary();
  num2.writeBinary();
  num3.writeBinary();

  num1.readBinary();
  num2.readBinary();
  num3.readBinary();


  return 0;
}

由於您使用單個文件並從每個Binary():: readBinary()開始讀取,因此您的結果與預期的一樣。 為每個對象使用不同的文件。

// In general we may need some random part in name but for this special case,
// since you are just writing / reading value, the following seems to work.

Binary::Binary(int num)
{
    value = num;
    binFile = "BinaryFile";    // common start
    binFile += std::to_string(value);    // differentiator
    binFile += ".bin";    // extension
}

或者,如果要使用同一文件,請嘗試從靜態變量獲取幫助,以免一次又一次地讀取同一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM