Closed GamingCity closed 1 year ago
Can be DeltaFilter #726, do you have the test file somewhere or can you build from this repo and test/report the CMethodId id value when it fails?
(sorry i posted the issue from the wrong account) Yeah this is the file, its extensionless but it is a 7z. https://cf.fsnebula.org/storage/38/aa/9cb349c96e4fc0d9e3b88d681642764af71cdf9476a7af6281caafdffafd
If you open it in 7z you can see that some entries are using Method Delta:X LZMA, The support for this was added recently and has not yet been released.
ok if this is fixed on main then ill close this for now.
OK, using master instead of the nuget package allowed to decompress a lot more files, but im still finding some of them fail to decompress... Like this one: https://cf.fsnebula.org/storage/7c/ba/0af317e290e891db84e4674bff95ded7ac5a10785292b59bca26381878d1
It seems that there is a Delta:1 and a Delta:2 but i dont think thats the issue as it seems to extract those files or most of those files just fine.
OK this is thwing the exception at deltafilter.cs, _distance is 0
public DeltaFilter(bool isEncoder, Stream baseStream, byte[] info) : base(isEncoder, baseStream, 1) { _distance = info[0]; _history = new byte[DISTANCE_MAX]; _position = 0;
if (_distance < DISTANCE_MIN)
{
throw new NotSupportedException();
}
}
Using the link, it actually fails on a file that 7zip says does not use the delta method, I will see if there are other conditions than the ID for the filter detection
and I was wrong, but it looks to be a noop setup, not applying the filter seems to be the right way, I'll look into it some more later
From my testing it looks like the check should be removed #735
@GamingCity please try master again, the changes has been merged.
Seems to be working fine now, thanks.
Thanks both!
Ive been getting this exception when i try to extract a 7zip file, it always start extracting files and get to the same point and throws the exception.
using (var archive = ArchiveFactory.Open("D:\test.7z")) { var reader = archive.ExtractAllEntries(); reader.EntryExtractionProgress += Reader_EntryExtractionProgress; while (reader.MoveToNextEntry()) <--Exception here { if (!reader.Entry.IsDirectory) reader.WriteEntryToDirectory("D:\temp", new ExtractionOptions() { ExtractFullPath = true, Overwrite = true }); } } void Reader_EntryExtractionProgress(object? sender, ReaderExtractionEventArgs e)
{
Console.WriteLine($"{e.Item.Key}: {e.ReaderProgress.PercentageRead} % read, {e.ReaderProgress.PercentageReadExact} % extracted");
}
Im using .net 6.0 on a simple console app.
It seems to complain that it cant call reflection from this context, yet i dont understand why it manages to extract half the file before having this problem.
WriteAllToDirectory() also gives this exception.