I am developing a c# application and I a need to extract a cab file.
I couldn't find a library that does that in C# ) I cannot use Microsoft.Deployment.Compression.Cab.dll because of a licensing issue.
I found this code, but the problem is that when I use it I am able to find and extract only the first file in the cabinet.
OutputFileClose is called only if OutputFileOpen returns something either then IntPtr.Zero. but if OutputFileClose is calles, then the enumeration is stopped. So for this code OutputFileClose can be called only for one file
Can someone please help me figuring out how to write a code that will extract all the files?
I found out that Microsoft.Deployment.Compression.cab DLL can also be obtained from here
if you look at previous versions such as version 3.5 you will see that they were licensed with Common Public License Version 1.0 (CPL).
It seems that only in later versions the license was changes to MS-RL.
I was also able to create a solution of my own, but it is not optimal( I stopped working on it since I found that I can use Microsoft.Deployment.Compression.cab).
This is the code:
Memory leak in the accepted answer. method: private IntPtr OutputFileClose(NativeMethods.FdiNotification fdin)
should call: GCHandle.FromIntPtr(fdin.hf).Free();
Have you tried exploring the 7zip sdk http://www.7-zip.org/sdk.html
Try this codeproject article - http://www.codeproject.com/Articles/15397/Cabinet-File-CAB-Compression-and-Extraction