우선 아래 url에서
http://icsharpcode.github.io/SharpZipLib/
Download.zip 을 통해 프로젝트를 다운받음.
Visual Studio (2015)로 부른 후 ICSharpCode.SharpZipLib 시작프로젝트로 설정
project 메뉴에서 맨 아래쪽에 Properties - Application - Target framework 를
.Net Framework 2.0으로 변경
release 로 빌드한 ICSharpCode.SharpZipLib.dll 를 유니티 적당한 장소에 복사하면 준비 끝.
현재 프로젝트에서 로컬에 데이터를 압축저장하기 사용함.
압축 및 저장하기
게임정보클래스 = gi;
BinaryFormatter _binary_formatter = new BinaryFormatter();
FileStream _filestream = File.Create(Application.persistentDataPath + "/파일이름");
#if ZIP_NONE // 압축하지 않을 경우
_binary_formatter.Serialize(_filestream, gi);
#elif ZIP_BZIP2
MemoryStream buffer = null;
MemoryStream m_msBZip2 = null;
BZip2OutputStream m_osBZip2 = null;
try
{
buffer = new MemoryStream();
_binary_formatter.Serialize(buffer, gi);
m_msBZip2 = new MemoryStream();
_binary_formatter.Serialize(buffer, gi);
Int32 size = (int)buffer.Length;
// Prepend the compressed data with the length of the uncompressed data (firs 4 bytes)
//
using (BinaryWriter writer = new BinaryWriter(m_msBZip2, System.Text.Encoding.ASCII))
{
writer.Write(size);
m_osBZip2 = new BZip2OutputStream(m_msBZip2);
m_osBZip2.Write(buffer.ToArray(), 0, size);
m_osBZip2.Close();
BinaryWriter bw = new BinaryWriter(_filestream);
bw.Write(m_msBZip2.ToArray(), 0, m_msBZip2.ToArray().Length);
buffer.Close();
m_msBZip2.Close();
bw.Close();
writer.Close();
}
}
finally
{
if (m_osBZip2 != null)
{
m_osBZip2.Dispose();
}
if (m_msBZip2 != null)
{
m_msBZip2.Dispose();
}
if (buffer != null)
{
buffer.Dispose();
}
}
#endif
_filestream.Close();
압축 해제 및 불러오기
게임정보클래스 Load()
{
게임정보클래스 gi = null;
bool _file_check = File.Exists(Application.persistentDataPath + "/파일이름");
if (_file_check)
{
FileStream _filestream = null;
try
{
BinaryFormatter _binary_formatter = new BinaryFormatter();
_filestream = File.Open((Application.persistentDataPath + "/파일이름"), FileMode.Open);
#if ZIP_NONE
gi = (GameInfo)_binary_formatter.Deserialize(_filestream);
#elif ZIP_BZIP2
MemoryStream m_msBZip2 = null;
BZip2InputStream m_isBZip2 = null;
try
{
using (BinaryReader reader = new BinaryReader(_filestream, System.Text.Encoding.ASCII))
{
Int32 size = reader.ReadInt32();
m_isBZip2 = new BZip2InputStream(_filestream);
byte[] bytesUncompressed = new byte[size];
m_isBZip2.Read(bytesUncompressed, 0, bytesUncompressed.Length);
m_msBZip2 = new MemoryStream(bytesUncompressed);
gi = (게임정보클래스)_binary_formatter.Deserialize(m_msBZip2);
m_isBZip2.Close();
m_msBZip2.Close();
reader.Close();
}
}
finally
{
if (m_isBZip2 != null)
{
m_isBZip2.Dispose();
}
if (m_msBZip2 != null)
{
m_msBZip2.Dispose();
}
}
#endif
_filestream.Close();
}
catch (Exception e)
{
//Debug.Log("----- " + e.Message);
_filestream.Close();
gi = new 게임정보클래스();
}
}
else
{
gi = new 게임정보클래스();
}
return gi;
}
위와 같이 사용했음. 안드로이드, 아이폰 시뮬레이터에서 작동 확인함.
아이폰 실기기에서 테스트하진 않았지만 문제없을걸로 판단됨.
참고사이트.
http://qiita.com/satotin/items/4bd0ff1a43c700278071
요근래의 SharpZipLib 버전은 net45 를 필요로 하는듯 합니다. 타깃프레임워크를 net20 으로 변경시 IncrementalHash 를 찾을 수 없다고 에러를 뱉네요
답글삭제