80 lines
1.8 KiB
C#
80 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Ionic.Zip;
|
|
using System.IO;
|
|
|
|
namespace Aiwaz.Common
|
|
{
|
|
public class FileSystem : IDisposable
|
|
{
|
|
private ZipFile zipFile;
|
|
public FileSystem()
|
|
{
|
|
if (File.Exists("data.pak"))
|
|
{
|
|
zipFile = ZipFile.Read("data.pak");
|
|
}
|
|
}
|
|
|
|
~FileSystem()
|
|
{
|
|
this.Dispose();
|
|
}
|
|
|
|
public Stream Open(string argFileName)
|
|
{
|
|
if (File.Exists(argFileName))
|
|
{
|
|
Stream fileStream = new FileStream(argFileName, FileMode.Open);
|
|
if (fileStream != null)
|
|
return fileStream;
|
|
}
|
|
|
|
if (zipFile != null)
|
|
{
|
|
var file = zipFile[argFileName];
|
|
if (file != null)
|
|
{
|
|
Stream outputStream = new MemoryStream();
|
|
file.Extract(outputStream);
|
|
return outputStream;
|
|
}
|
|
}
|
|
|
|
throw new FileNotFoundException(argFileName);
|
|
}
|
|
|
|
#region IDisposable Members
|
|
|
|
public void Dispose()
|
|
{
|
|
if (zipFile != null)
|
|
{
|
|
zipFile.Dispose();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
public static class BinaryReaderExtensions
|
|
{
|
|
public static string ReadNullTerminatedString(this BinaryReader reader)
|
|
{
|
|
string result = string.Empty;
|
|
char readChar = '\0';
|
|
do
|
|
{
|
|
readChar = reader.ReadChar();
|
|
if (readChar != '\0')
|
|
result += readChar;
|
|
}
|
|
while (readChar != '\0');
|
|
return result;
|
|
}
|
|
}
|
|
|
|
}
|