Visual C++ .NET/File Directory/BinaryWriter

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Binary read and write with BinaryWriter and BinaryReader

 
#include "stdafx.h"
using namespace System;
using namespace System::IO;

ref class Role
{
    String ^Name;
    Int32   Strength;
    Boolean IsMale;
    DateTime CreateDate;
public:
    Role();
    Role (String ^Name, int Str, bool IsMale);
    void Print();
    void Save(String ^fname);
    void Load(String ^fname);
};
Role::Role()
{
}
Role::Role (String ^Name, int Str, bool IsMale)
{
    this->Name     = Name;
    this->Strength = Str;
    this->IsMale   = IsMale;
    this->CreateDate = DateTime::Now;
}
void Role::Print()
{
    Console::WriteLine("Name: {0} ({1})", Name, (IsMale ? "M" : "F"));
    Console::WriteLine("Str:  {0}", Strength);
    Console::WriteLine("Date: {0}", CreateDate.ToString());
}
void Role::Save(String ^fname)
{
    FileStream   ^fs = File::OpenWrite(fname);
    BinaryWriter ^bw = gcnew BinaryWriter(fs);
    bw->Write(Name);
    bw->Write(Strength);
    bw->Write(IsMale);
    bw->Write(CreateDate.Ticks);  
    bw->Close();
    fs->Close();
}
void Role::Load(String ^fname)
{
    FileStream   ^fs = File::OpenRead(fname);
    BinaryReader ^br = gcnew BinaryReader(fs);
    Name     = br->ReadString();
    Strength = br->ReadInt32();
    IsMale   = br->ReadBoolean();
    CreateDate = DateTime( br->ReadInt64() );
    br->Close();
    fs->Close();
}
void main(){
    Role ^r = gcnew Role("r", 10, true);
    r->Save("Role.dat");
    Console::WriteLine("Original r");
    r->Print();
    Role ^rClone = gcnew Role();
    rClone->Load("Role.dat");
    Console::WriteLine("\nCloned r");
    rClone->Print();
}