Support for 7zip-Zstandard codecs in archives

Hi,

I've been starting to use the 7zip-Zstandard version of 7zip.. With support for additional codecs that can be either faster and/or have a better compression ratio than lzma2 of the standard 7zip. (Site: https://github.com/mcmilk/7-Zip-Zstd )

Using the VFS Plugin, I am able to 'enter' into 7zip archives that use any of the new codecs. However when I try to, say, double-click on a .txt file for instance - I get an error stating: "An error occurred copying 'xx.txt' - the system cannot find the file specified. (2)".

I've tried playing with various combinations of replacing the 7z.dll and/or opus7zip.dll - as well as copying the codecs both into a "Codecs" directory, and also into the main "VFSPlugins" folder. But I still can't get it to open files contained within the archive. I have to extract it first in order to access the files.. Making it not-so-ideal.

I'm sincerely hoping that Dopus can support this, and yet have this plugin work in Dopus11. I'm disabled, in the middle of an 8-year disability case, and am now destitute with my sister helping for the bare essentials... So I absolutely can't afford to get Dopus12 at this time.

Some of these new codecs are used in large/major organizations, including Google and Facebook. So they're definitely mature and stable enough.

Please say that this is doable.. I'd really like to use these new codecs more often. :relaxed:

1 Like

You should be able to replace 7z.dll with alternative versions, provided that they have not changed the 7z API and have a suitable version number.

I do not know enough about this fork of 7z.dll to say if that is the case or if there would be other barriers to supporting it. At the moment we only intend to support the official 7z.dll releases, but we do not do anything to stop people swapping the DLL for alternative versions if they wish, as long as the DLL is compatible with the original's interface.

Note that you may need to fully exiting Opus (via File / Exit Directory Opus) after replacing the DLL for the new one to be picked up.

I have successfully replaced the 7z.dll with the official 7-zip v17.00. However, it still doesn't want to do anything with the files inside the archive that use the new codecs. It turned out that this wasn't possible with the 7zip-zstd fork's 7z.dll. (Should anything be done regarding the "opus7zip.dll"?? (Although I've already tried a couple/few things to no avail. And of course, I've been doing a lot of fully 'Exiting' Dopus, and even rebooting the computer.))

It should also be noted that the official 7-zip supports at least the decompression of them, by putting the 7zip-Zstd codec files into a directory titled "Codecs" into the main official 7-zip program directory. I've tested that and it does work - when using the standard context menu of the official 7zip program to extract them. The official one doesn't seem to support the compression though, at least not via the 'add to archive' GUI - which is ok by me since when making 7zip's I have always used either the official or now the 7zip-Zstd context menus that they themselves add.

Along with the replaced official 7z.dll v17.00, I have put the "Codecs" directory that it supports within the VFSPlugins folder, and even duplicated with new names without the '-x64'. I also have all those files in the straight VFSPlugins folder too, just in case.. I also have done the same with the 32-bit versions inside the x86 directory, again just in case.

I'm not hoping for it to be able to support the compression aspects.. (Although that would certainly be nice when adding files while inside the archive.. And come to think of it, I think it still adds new files - but uses lzma(2?) compression on any of those new files.) .... The main part I'm hoping for is at least the decompression aspects that the official 7-zip currently supports when putting codecs into the "Codecs" folder. I have no idea if that feature is new to the official v17.00 or was available prior to it - and I also don't know enough about programming, or even the API business you mention. And the main reason I'm hoping for such, is to be able to double/right-click files inside such archives, to view them and whatnot.

(And as an aside, you really should try the Zstandard codec. Even when using 'fastest', the compression ratio to speed is breathtaking! Same with extraction! :open_mouth: (The Zstandard codec is one that is used by either Google and/or Facebook. Brotli being another big one that either of those uses.. I forget which uses which, though.) I'm not one that would usually get excited about 'new' (to me) compression/decompression codecs, but WOW, some of these are truly amazing! :nerd: )

Try making the codecs folder below the folder containing dopus.exe.

Failing that, you could use Process Monitor to see where it is looking for the codec files, which will be where they need to be placed. Assuming we do not need to turn on looking for codec files in some way, and it's something 7z.dll does by default.

You don't need to do anything to opus7zip.dll. (There is nothing much you could do to it.)

Puttting the Codecs folder there didn't help - even after a reboot.

I'm trying to make heads or tails of the Process Monitor, but am so far unsuccessful in figuring it out. ... A big part of my disability affects cognition & memory - and I can get confused easily, with headaches when trying to push past it. So you might imagine how using the Process Monitor can cause confusion. :wink: I'm still trying, though.

Are you able to help figure this out? I'm stumped here.

No, sorry. It's not something that we support or know anything about really. If more people ask about it we may investigate it ourselves but you are the first to mention it. Our focus is on the standard/official 7z.dll capabilities only.

Hello,

I am the author of 7-Zip ZS... and the latest Codecs.7z archiv contains the needed and compatible 7z.dll files :wink:

Best regards, Tino

1 Like

Hi Tino,

I've been trying to find a way to reach you, so I'm glad you found this thread - and within a forum for the program I desire compatibility with!
There's some more background to the issues I'm having, especially in the last 2 posts by me - located at the main 7-zip forum, here: https://sourceforge.net/p/sevenzip/discussion/45798/thread/67f8e0f0/.

Basically, your 7z.dll didn't want to work at all with Opus. I got your Total Commander 7z.dll to sort-of work within Opus's VFS.

Trying to boil this down, short and sweet:
Using Igor's main 7z.dll v17.00, I'm able to to enter into all archive compression types to explore their directory contents, and even add/update files within them (albeit only ever with lzma2 compression for the additions). For straight lzma2 archives I'm able to do everything as normal - add, update, double-click open. However, when entered into archives using the new codecs, I am not able to double-click open or even copy any file out of such archives. (I've already tried placing the codecs folder in every place imaginable.)

Using your Total Commander 7z.dll, I am able to enter into, copy files out of, and double-click open files within all archive compression types. However, I'm not able to add/update files within ANY archive compression types - not even straight lzma2-compressed archives that Opus directly supports.

Obviously, in the best case scenario I would like to be able to do everything as normal with all these archive types. However what I'm still hopeful for is to view, copy, and open files within all these archive types, and at least be able to add/update lzma2 archives - and hopefully even add/update the newer-codec archives with using Opus's supported lzma2 compression. In other words, Opus would only ever have to use it's supported lzma2 compression for any newly added/updated files.

Hopefully I'm making myself clear enough.. I often have issues in that department. :slight_smile:

A major use case I already have in mind, is for Zstandard's lightning-fast compression at a very respectable near-lzma2 ratio (thinking level 11-normal here) for a ~160MB encrypted archive I have that I often enter into and add/delete/replace files within.. That's where I'm ideally hoping that speed advantage helps out - in adding/deleting/updating files within it.

Many Thanks for replying,
Brian

The easiest way to reach me, when there are problems with 7-Zip ZS is the issues page on github.

The TotalCmd.7z contains a compatible 7zxa.dll. This DLL will work for decompression only. The needed 7z.dll you want to have is within the Codecs.7z (since yesterday)... so please load the newest Codecs.7z file and then use the 7z-x32.dll, 7z-x64.dll or 7z-ia64.dll... depending on your system :slight_smile:

And I am sorry for this 7z.dll incompatiblity. But there is no other way, because a lot users wanted to have 7-Zip ZS and 7-Zip in parallel... and when they share this GUID with mainline 7-Zip ... my version would not work correctly. :wink:

1 Like

UGH! So Beautiful.. Just so.. Beautiful! :joy:

I've been at this so long - and to see everything working like this.. It almost bring tears to my eyes. :sob: So much of what I was hoping for!

I see when adding a files to, say, a Zstd archive, it looks like it creates a second solid chunk as lzma2 (I didn't specify solid on the original archive's command line, cause it supposedly defaults to solid). This is exactly what I thought might happen in a best case scenario!

But I'm wondering if it would be at all possible to have the new files in the main container's codec?? Or would that require something on Directory Opus's part - for the VFS plugin? ...Which would seem to be a 'non-starter' according to what Leo said.
...... Unless maybe we could talk Leo into some form of support for it..?? Even 'hidden' support (as in nothing GUI related) would be great.

What ever the case, thank you Tino for allowing some form of support for Directory Opus - and for creating 7-Zip-Ztandard. And of course thanks to Leo for providing such an amazing file manager.. I've been using Opus ever since it was on the Commodore Amiga.

UPDATE: I now notice that when deleting files that were in the original archive-codec, that the whole archive is turned into lzma2. I'm thinking this is likely due to Opus's VFS plugin handling a complete recompression. Is this fixable in any way?

I'd like to be another person asking for this as this new zstandard compression algorithm does indeed seem to be the very best across a wide range of needs and it'd be nice if Opus could figure out how to support it

The latest 7-Zip ZS Codecs-x64.7z and TotalCmd.7z don't contain 7z.dll, 7z-x64.dll, or 7zxa.dll.

Proxy7z with Modern7z lets DO read files compressed with the new codecs. I also tried out the developer's main product, TC4Shell:

  • Proxy7z integrates better with DO. If you disable DO's 7z plugin, TC4Shell can take over DO's file display, but some things don't work or have rough edges. For example, just selecting a file extracts it to the Temp folder.
  • TC4Shell can save different compression settings, but you can only select them by right-clicking on the files you want to add. Drag and drop always uses your default settings.

@Leo, they seem to want more file managers to support 7-Zip codec plugins, so maybe they could explain how it works?