본문 바로가기

프로그램/유니티 스크립트 소스

[유니티 스크립트 소스] 바이너리(Binary) 파일 읽고 쓰기

728x90
반응형

바이너리 파일을 읽고 쓰는 소스입니다.

바이너리 파일은 확장자를 .bin으로 해야 합니다.

 

1. 소스

1.1 네임스페이스

 

네임스페이스
using System.Runtime.Serialization.Formatters.Binary; 
using System.IO; 
using System; 

 

1.2 메서드

 

메서드 : 바이너리 쓰기
public void WriteBinary(string filePath, BinaryData binaryData)
{
    DirectoryInfo directoryInfo = new DirectoryInfo(Path.GetDirectoryName(filePath));

    if (!directoryInfo.Exists)
    {
        directoryInfo.Create();
    }

    BinaryFormatter binaryFormatter = new BinaryFormatter();
    FileStream fileStream = File.Open(filePath, FileMode.OpenOrCreate);
    binaryFormatter.Serialize(fileStream, binaryData);
    fileStream.Close();
}

 

메서드 : 바이너리 읽기
public T ReadBinary <T>(string filePath)
{
    BinaryFormatter binaryFormatter = new BinaryFormatter();
    FileStream fileStream = File.Open(filePath, FileMode.Open);

    if (fileStream != null && fileStream.Length > 0)
        return (T)binaryFormatter.Deserialize(fileStream);

    else
    {
        Debug.Log("바이너리 파일을 확인해 보세요!!");
        return default(T);
    }
}

 

 

2. 데모

using UnityEngine; 
using System.Runtime.Serialization.Formatters.Binary; 
using System.IO; 
using System; 

[Serializable] 
public struct BinaryData 
{ 
    public string stringData; 
    public bool boolData; 
    public int intData; 
    public float floatData; 
}; 

public class DemoBinaryFile : MonoBehaviour 
{ 
    public BinaryData m_WriteData; 
    public BinaryData m_ReadData; 

    void Update() 
    { 
        if (Input.GetKeyDown(KeyCode.W)) 
        { 
            string filePath = Path.Combine(Application.streamingAssetsPath, "Example.bin");  
            // 바이너리파일은 확장자가 bin으로 해야 합니다. 

            m_WriteData = new BinaryData(); 
            m_WriteData.stringData = "Coderzero"; 
            m_WriteData.boolData = false; 
            m_WriteData.intData = 12; 
            m_WriteData.floatData = 3.45f; 

            WriteBinary(filePath, m_WriteData); 
        } 

        if (Input.GetKeyDown(KeyCode.R)) 
        { 
            string filePath = Path.Combine(Application.streamingAssetsPath, "Example.bin"); 
            // 바이너리파일은 확장자가 bin으로 해야 합니다. 
            m_ReadData = (BinaryData)ReadBinary<BinaryData>(filePath); 

            Debug.Log(m_ReadData.stringData); 
        } 
    } 

    public void WriteBinary(string filePath, BinaryData binaryData) 
    { 
        DirectoryInfo directoryInfo = new DirectoryInfo(Path.GetDirectoryName(filePath)); 

        if (!directoryInfo.Exists) 
        { 
            directoryInfo.Create(); 
        } 

        BinaryFormatter binaryFormatter = new BinaryFormatter(); 
        FileStream fileStream = File.Open(filePath, FileMode.OpenOrCreate); 
        binaryFormatter.Serialize(fileStream, binaryData); 
        fileStream.Close(); 
    } 

    public T ReadBinary <T>(string filePath) 
    { 
        BinaryFormatter binaryFormatter = new BinaryFormatter(); 
        FileStream fileStream = File.Open(filePath, FileMode.Open); 

        if (fileStream != null && fileStream.Length > 0) 
            return (T)binaryFormatter.Deserialize(fileStream); 

        else 
        { 
            Debug.Log("바이너리 파일을 확인해 보세요!!"); 
            return default(T); 
        } 
    } 
}

 

728x90
반응형