public void CabExtractorGetFiles() { IList<ArchiveFileInfo> fileInfo; CabInfo cabInfo = new CabInfo("testgetfiles.cab"); int txtSize = 10240; CompressionTestUtil.GenerateRandomFile("testgetfiles0.txt", 0, txtSize); CompressionTestUtil.GenerateRandomFile("testgetfiles1.txt", 1, txtSize); cabInfo.PackFiles(null, new string[] { "testgetfiles0.txt", "testgetfiles1.txt" }, null); using (CabEngine cabEngine = new CabEngine()) { IList<string> files; using (Stream cabStream = File.OpenRead("testgetfiles.cab")) { files = cabEngine.GetFiles(cabStream); } Assert.IsNotNull(files); Assert.AreEqual<int>(2, files.Count); Assert.AreEqual<string>("testgetfiles0.txt", files[0]); Assert.AreEqual<string>("testgetfiles1.txt", files[1]); using (Stream cabStream = File.OpenRead("testgetfiles.cab")) { files = cabEngine.GetFiles(new ArchiveFileStreamContext("testgetfiles.cab"), null); } Assert.IsNotNull(files); Assert.AreEqual<int>(2, files.Count); Assert.AreEqual<string>("testgetfiles0.txt", files[0]); Assert.AreEqual<string>("testgetfiles1.txt", files[1]); using (Stream cabStream = File.OpenRead("testgetfiles.cab")) { fileInfo = cabEngine.GetFileInfo(cabStream); } Assert.IsNotNull(fileInfo); Assert.AreEqual<int>(2, fileInfo.Count); Assert.AreEqual<string>("testgetfiles0.txt", fileInfo[0].Name); Assert.AreEqual<string>("testgetfiles1.txt", fileInfo[1].Name); using (Stream cabStream = File.OpenRead("testgetfiles.cab")) { fileInfo = cabEngine.GetFileInfo(new ArchiveFileStreamContext("testgetfiles.cab"), null); } Assert.IsNotNull(fileInfo); Assert.AreEqual<int>(2, fileInfo.Count); Assert.AreEqual<string>("testgetfiles0.txt", fileInfo[0].Name); Assert.AreEqual<string>("testgetfiles1.txt", fileInfo[1].Name); } fileInfo = this.RunCabinetPackUnpack(15, 20 * 1024, 1 * 1024, 130 * 1024); Assert.IsNotNull(fileInfo); Assert.AreEqual<int>(15, fileInfo.Count); for (int i = 0; i < fileInfo.Count; i++) { Assert.IsNull(fileInfo[i].Archive); Assert.AreEqual<string>(TEST_FILENAME_PREFIX + i + ".txt", fileInfo[i].Name); Assert.IsTrue(DateTime.Now - fileInfo[i].LastWriteTime < new TimeSpan(0, 1, 0)); } }
private IList<ArchiveFileInfo> RunCabinetPackUnpack(int fileCount, long fileSize, long maxFolderSize, long maxArchiveSize, CompressionLevel compLevel) { Console.WriteLine("Creating cabinet with {0} files of size {1}", fileCount, fileSize); Console.WriteLine("MaxFolderSize={0}, MaxArchiveSize={1}, CompressionLevel={2}", maxFolderSize, maxArchiveSize, compLevel); string dirA = String.Format("{0}-{1}-A", fileCount, fileSize); if (Directory.Exists(dirA)) Directory.Delete(dirA, true); Directory.CreateDirectory(dirA); string dirB = String.Format("{0}-{1}-B", fileCount, fileSize); if (Directory.Exists(dirB)) Directory.Delete(dirB, true); Directory.CreateDirectory(dirB); string[] files = new string[fileCount]; for (int iFile = 0; iFile < fileCount; iFile++) { files[iFile] = TEST_FILENAME_PREFIX + iFile + ".txt"; CompressionTestUtil.GenerateRandomFile(Path.Combine(dirA, files[iFile]), iFile, fileSize); } string[] archiveNames = new string[100]; for (int i = 0; i < archiveNames.Length; i++) { archiveNames[i] = String.Format("{0}-{1}{2}{3}.cab", fileCount, fileSize, (i == 0 ? "" : "-"), (i == 0 ? "" : i.ToString())); } string progressTextFile = String.Format("progress_{0}-{1}.txt", fileCount, fileSize); CompressionTestUtil testUtil = new CompressionTestUtil(progressTextFile); IList<ArchiveFileInfo> fileInfo; using (CabEngine cabEngine = new CabEngine()) { cabEngine.CompressionLevel = compLevel; File.AppendAllText(progressTextFile, "\r\n\r\n====================================================\r\nCREATE\r\n\r\n"); cabEngine.Progress += testUtil.PrintArchiveProgress; OptionStreamContext streamContext = new OptionStreamContext(archiveNames, dirA, null); if (maxFolderSize == 1) { streamContext.OptionHandler = delegate(string optionName, object[] parameters) { if (optionName == "nextFolder") return true; return null; }; } else if (maxFolderSize > 1) { streamContext.OptionHandler = delegate(string optionName, object[] parameters) { if (optionName == "maxFolderSize") return maxFolderSize; return null; }; } cabEngine.Pack(streamContext, files, maxArchiveSize); IList<string> createdArchiveNames = new List<string>(archiveNames.Length); for (int i = 0; i < archiveNames.Length; i++) { if (File.Exists(archiveNames[i])) { createdArchiveNames.Add(archiveNames[i]); } else { break; } } Console.WriteLine("Listing cabinet with {0} files of size {1}", fileCount, fileSize); File.AppendAllText(progressTextFile, "\r\n\r\nLIST\r\n\r\n"); fileInfo = cabEngine.GetFileInfo( new ArchiveFileStreamContext(createdArchiveNames, null, null), null); Assert.AreEqual<int>(fileCount, fileInfo.Count); if (fileCount > 0) { int folders = ((CabFileInfo) fileInfo[fileInfo.Count - 1]).CabinetFolderNumber + 1; if (maxFolderSize == 1) { Assert.AreEqual<int>(fileCount, folders); } } Console.WriteLine("Extracting cabinet with {0} files of size {1}", fileCount, fileSize); File.AppendAllText(progressTextFile, "\r\n\r\nEXTRACT\r\n\r\n"); cabEngine.Unpack(new ArchiveFileStreamContext(createdArchiveNames, dirB, null), null); } bool directoryMatch = CompressionTestUtil.CompareDirectories(dirA, dirB); Assert.IsTrue(directoryMatch, "Testing whether cabinet output directory matches input directory."); return fileInfo; }