mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Blind update of zip code to newest RVWorld version
This commit is contained in:
214
SabreTools.Library/External/Compress/File/File.cs
vendored
Normal file
214
SabreTools.Library/External/Compress/File/File.cs
vendored
Normal file
@@ -0,0 +1,214 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using Compress.Utils;
|
||||
using Path = RVIO.Path;
|
||||
using FileInfo = RVIO.FileInfo;
|
||||
using FileStream = RVIO.FileStream;
|
||||
|
||||
namespace Compress.File
|
||||
{
|
||||
public class File : ICompress
|
||||
{
|
||||
private FileInfo _fileInfo;
|
||||
private Stream _inStream;
|
||||
private byte[] _crc;
|
||||
|
||||
public string ZipFilename => _fileInfo?.FullName ?? "";
|
||||
|
||||
public long TimeStamp => _fileInfo?.LastWriteTime ?? 0;
|
||||
|
||||
public ZipOpenType ZipOpen { get; private set; }
|
||||
|
||||
|
||||
public ZipStatus ZipStatus { get; private set; }
|
||||
|
||||
public int LocalFilesCount()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public string Filename(int i)
|
||||
{
|
||||
return Path.GetFileName(ZipFilename);
|
||||
}
|
||||
|
||||
public bool IsDirectory(int i)
|
||||
{
|
||||
return RVIO.Directory.Exists(ZipFilename);
|
||||
}
|
||||
|
||||
public ulong UncompressedSize(int i)
|
||||
{
|
||||
return _fileInfo != null ? (ulong)_fileInfo.Length : 0;
|
||||
}
|
||||
|
||||
public ulong? LocalHeader(int i)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public ZipReturn FileStatus(int i)
|
||||
{
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
public byte[] CRC32(int i)
|
||||
{
|
||||
return _crc;
|
||||
}
|
||||
|
||||
public ZipReturn ZipFileCreate(string newFilename)
|
||||
{
|
||||
if (ZipOpen != ZipOpenType.Closed)
|
||||
{
|
||||
return ZipReturn.ZipFileAlreadyOpen;
|
||||
}
|
||||
|
||||
DirUtil.CreateDirForFile(newFilename);
|
||||
_fileInfo = new FileInfo(newFilename);
|
||||
|
||||
int errorCode = FileStream.OpenFileWrite(newFilename, out _inStream);
|
||||
if (errorCode != 0)
|
||||
{
|
||||
ZipFileClose();
|
||||
return ZipReturn.ZipErrorOpeningFile;
|
||||
}
|
||||
ZipOpen = ZipOpenType.OpenWrite;
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
|
||||
public void ZipFileClose()
|
||||
{
|
||||
if (ZipOpen == ZipOpenType.Closed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (ZipOpen == ZipOpenType.OpenRead)
|
||||
{
|
||||
if (_inStream != null)
|
||||
{
|
||||
_inStream.Close();
|
||||
_inStream.Dispose();
|
||||
}
|
||||
ZipOpen = ZipOpenType.Closed;
|
||||
return;
|
||||
}
|
||||
|
||||
_inStream.Flush();
|
||||
_inStream.Close();
|
||||
_inStream.Dispose();
|
||||
_fileInfo = new FileInfo(_fileInfo.FullName);
|
||||
ZipOpen = ZipOpenType.Closed;
|
||||
}
|
||||
|
||||
|
||||
public ZipReturn ZipFileOpen(string newFilename, long timestamp, bool readHeaders)
|
||||
{
|
||||
ZipFileClose();
|
||||
ZipStatus = ZipStatus.None;
|
||||
_fileInfo = null;
|
||||
|
||||
try
|
||||
{
|
||||
if (!RVIO.File.Exists(newFilename))
|
||||
{
|
||||
ZipFileClose();
|
||||
return ZipReturn.ZipErrorFileNotFound;
|
||||
}
|
||||
_fileInfo = new FileInfo(newFilename);
|
||||
if (timestamp != -1 && _fileInfo.LastWriteTime != timestamp)
|
||||
{
|
||||
ZipFileClose();
|
||||
return ZipReturn.ZipErrorTimeStamp;
|
||||
}
|
||||
int errorCode = FileStream.OpenFileRead(newFilename, out _inStream);
|
||||
if (errorCode != 0)
|
||||
{
|
||||
ZipFileClose();
|
||||
if (errorCode == 32)
|
||||
{
|
||||
return ZipReturn.ZipFileLocked;
|
||||
}
|
||||
return ZipReturn.ZipErrorOpeningFile;
|
||||
}
|
||||
}
|
||||
catch (PathTooLongException)
|
||||
{
|
||||
ZipFileClose();
|
||||
return ZipReturn.ZipFileNameToLong;
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
ZipFileClose();
|
||||
return ZipReturn.ZipErrorOpeningFile;
|
||||
}
|
||||
ZipOpen = ZipOpenType.OpenRead;
|
||||
|
||||
if (!readHeaders)
|
||||
{
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
|
||||
//return ZipFileReadHeaders();
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
|
||||
public ZipReturn ZipFileOpen(Stream inStream)
|
||||
{
|
||||
ZipFileClose();
|
||||
ZipStatus = ZipStatus.None;
|
||||
_fileInfo = null;
|
||||
_inStream = inStream;
|
||||
ZipOpen = ZipOpenType.OpenRead;
|
||||
|
||||
//return ZipFileReadHeaders();
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ZipFileAddDirectory()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ZipReturn ZipFileCloseWriteStream(byte[] crc32)
|
||||
{
|
||||
_crc = crc32;
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
public void ZipFileCloseFailed()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ZipReturn ZipFileOpenReadStream(int index, out Stream stream, out ulong streamSize)
|
||||
{
|
||||
_inStream.Position = 0;
|
||||
stream = _inStream;
|
||||
streamSize = (ulong)_fileInfo.Length;
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
public ZipReturn ZipFileOpenWriteStream(bool raw, bool trrntzip, string filename, ulong uncompressedSize, ushort compressionMethod, out Stream stream)
|
||||
{
|
||||
_inStream.Position = 0;
|
||||
stream = _inStream;
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
public ZipReturn ZipFileCloseReadStream()
|
||||
{
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user