public void IsValidWhenTheMinimumNecessaryInformationAreThere() { var hdasset = new HdAsset(); using var stream = new MemoryStream(); hdasset.Write(stream); Assert.True(HdAsset.IsValid(stream.SetPosition(0))); }
public Stream FileOpen(string fileName) { var stream = _innerDataContext.FileOpen(fileName); if (stream == null) { return(null); } return(HdAsset.Read(stream).Stream); }
public void WriteBackTheSameReadStream() => Helpers.UseAsset("ps4archive.bin", stream => { Helpers.AssertStream(stream, x => { var asset = HdAsset.Read(stream); var outStream = new MemoryStream(); asset.Write(outStream); return(outStream); }); });
public void IsNotValidWhenTheInnerStreamLengthIsTooBig() { var hdasset = new HdAsset(); hdasset.Stream = new MemoryStream(new byte[] { 2, 3, 4, 5, 6, 7, 8 }); using var stream = new MemoryStream(); hdasset.Write(stream); stream.SetLength(stream.Length - 1); Assert.False(HdAsset.IsValid(stream.SetPosition(0))); }
public void IsNotValidIfThereAreTooManyHdAssets() { var hdasset = new HdAsset(); hdasset.Stream = new MemoryStream(new byte[] { 2, 3, 4, 5, 6, 7, 8 }); hdasset.Entries = Enumerable .Range(0, 1024) .Select(x => new HdAsset.Entry() { Name = "Test", Stream = new MemoryStream() }) .ToList(); using var stream = new MemoryStream(); hdasset.Write(stream); stream.SetLength(stream.Length - 1); Assert.False(HdAsset.IsValid(stream.SetPosition(0))); }
protected void OnExecute(CommandLineApplication app) { var prefix = Prefix ?? DefaultPrefix; foreach (var filePath in GetFiles(Input, Recursive, prefix)) { using (var stream = File.OpenRead(filePath)) { HdAsset asset; try { // Avoid to crash on files that are not a ReMIX asset asset = HdAsset.Read(stream); } catch { // Not a ReMIX asset continue; } var directoryName = Path.GetDirectoryName(filePath); Console.Write(filePath); foreach (var entry in asset.Entries) { var outDir = Path.GetFileNameWithoutExtension(filePath); var outFileName = Path.Combine(directoryName, $"{prefix}{outDir}", entry.Name); Directory.CreateDirectory(Path.GetDirectoryName(outFileName)); using (var outStream = File.Create(outFileName)) { entry.Stream.Position = 0; entry.Stream.CopyTo(outStream); } } } } }
protected void OnExecute(CommandLineApplication app) { foreach (var filePath in GetFiles(Input, Recursive, DefaultPrefix)) { HdAsset asset; using (var stream = File.OpenRead(filePath)) { try { // Avoid to crash on files that are not a ReMIX asset asset = HdAsset.Read(stream); } catch { // Not a ReMIX asset continue; } } using (var stream = File.Create(filePath)) asset.Stream.CopyTo(stream); } }
private static void UnpackFile(string filePath) { var directoryName = Path.GetDirectoryName(filePath); Console.Write($"{filePath}... "); using (var stream = File.OpenRead(filePath)) { HdAsset asset; try { // Avoids to throw a false positive to files that are not an HdAsset asset = HdAsset.Read(stream); } catch { Console.WriteLine("ERROR!"); return; } foreach (var entry in asset.Entries) { var outDir = Path.GetFileNameWithoutExtension(filePath); var outFileName = Path.Combine(directoryName, $"{Prefix}{outDir}", entry.Name); Directory.CreateDirectory(Path.GetDirectoryName(outFileName)); using (var outStream = File.Create(outFileName)) { entry.Stream.Position = 0; entry.Stream.CopyTo(outStream); } } } Console.WriteLine("Ok!"); }
public void IsNotValidWhenTheHeaderSizeIsTooSmall() { var stream = new MemoryStream(new byte[15]); Assert.False(HdAsset.IsValid(stream)); }
public void IsValid() => Helpers.UseAsset("ps4archive.bin", stream => { Assert.True(HdAsset.IsValid(stream)); });
public void CannotAssignNullEntriesListStream() { Assert.Throws <ArgumentNullException>(() => HdAsset.New().Entries = null); }
public void CannotAssignNullMainStream() { Assert.Throws <ArgumentNullException>(() => HdAsset.New().Stream = null); }