public void Test_TRANSACTED_ADD_MINISTREAM_TO_EXISTING_FILE() { String srcFilename = "report.xls"; String dstFilename = "reportOverwriteMultiple.xls"; File.Copy(srcFilename, dstFilename, true); CompoundFile cf = new CompoundFile(dstFilename, UpdateMode.Update, true, true); Random r = new Random(); byte[] buffer = Helpers.GetBuffer(31, 0x0A); cf.RootStorage.AddStream("MyStream").SetData(buffer); cf.Commit(); cf.Close(); FileStream larger = new FileStream(dstFilename, FileMode.Open); FileStream smaller = new FileStream(srcFilename, FileMode.Open); // Equal condition if minisector can be "allocated" // within the existing standard sector border Assert.IsTrue(larger.Length >= smaller.Length); larger.Close(); smaller.Close(); if (File.Exists("reportOverwriteMultiple.xlsPP")) { File.Delete("reportOverwriteMultiple.xlsPP"); } }
public void Test_LAZY_LOAD_CHILDREN_() { CompoundFile cf = new CompoundFile(); cf.RootStorage.AddStorage("Level_1") .AddStorage("Level_2") .AddStream("Level2Stream") .SetData(Helpers.GetBuffer(100)); cf.Save("$Hel1"); cf.Close(); cf = new CompoundFile("$Hel1"); IList <ICFItem> i = cf.GetAllNamedEntries("Level2Stream"); Assert.IsNotNull(i[0]); Assert.IsTrue(i[0] is ICFStream); Assert.IsTrue((i[0] as ICFStream).GetData().Length == 100); cf.Save("$Hel2"); cf.Close(); if (File.Exists("$Hel1")) { File.Delete("$Hel1"); } if (File.Exists("$Hel2")) { File.Delete("$Hel2"); } }
private void SingleWriteReadMatching(int size) { String filename = "INCREMENTAL_SIZE_MULTIPLE_WRITE_AND_READ_CFS.cfs"; if (File.Exists(filename)) { File.Delete(filename); } CompoundFile cf = new CompoundFile(); ICFStorage st = cf.RootStorage.AddStorage("MyStorage"); ICFStream sm = st.AddStream("MyStream"); byte[] b = Helpers.GetBuffer(size); sm.SetData(b); cf.Save(filename); cf.Close(); CompoundFile cf2 = new CompoundFile(filename); ICFStorage st2 = cf2.RootStorage.GetStorage("MyStorage"); ICFStream sm2 = st2.GetStream("MyStream"); Assert.IsNotNull(sm2); Assert.IsTrue(sm2.Size == size); Assert.IsTrue(Helpers.CompareBuffer(sm2.GetData(), b)); cf2.Close(); }
public void Test_APPEND_DATA_TO_CREATE_LARGE_STREAM() { byte[] b = Helpers.GetBuffer(1024 * 1024 * 50); //2GB buffer byte[] cmp = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; CompoundFile cf = new CompoundFile(CFSVersion.Ver_4, false, false); CFStream st = cf.RootStorage.AddStream("MySuperLargeStream"); cf.Save("MEGALARGESSIMUSFILE.cfs"); cf.Close(); cf = new CompoundFile("MEGALARGESSIMUSFILE.cfs", UpdateMode.Update, false, false); CFStream cfst = cf.RootStorage.GetStream("MySuperLargeStream"); for (int i = 0; i < 42; i++) { cfst.AppendData(b); cf.Commit(true); } cfst.AppendData(cmp); cf.Commit(true); cf.Close(); cf = new CompoundFile("MEGALARGESSIMUSFILE.cfs"); int count = 8; byte[] data = cf.RootStorage.GetStream("MySuperLargeStream").GetData((long)b.Length * 42L, ref count); Assert.IsTrue(Helpers.CompareBuffer(cmp, data)); cf.Close(); }
public void Test_DIFAT_CHECK() { CompoundFile f = null; try { f = new CompoundFile(); ICFStream st = f.RootStorage.AddStream("LargeStream"); st.AppendData(Helpers.GetBuffer(20000000, 0x0A)); //Forcing creation of two DIFAT sectors byte[] b1 = Helpers.GetBuffer(3, 0x0B); st.AppendData(b1); //Forcing creation of two DIFAT sectors f.Save("$OpenMcdf$LargeFile.cfs"); f.Close(); int cnt = 3; f = new CompoundFile("$OpenMcdf$LargeFile.cfs"); byte[] b2 = f.RootStorage.GetStream("LargeStream").GetData(20000000, ref cnt); f.Close(); Assert.IsTrue(Helpers.CompareBuffer(b1, b2)); } finally { if (f != null) { f.Close(); } if (File.Exists("$OpenMcdf$LargeFile.cfs")) { File.Delete("$OpenMcdf$LargeFile.cfs"); } } }
public void Test_WRITE_AND_READ_CFS() { String filename = "WRITE_AND_READ_CFS.cfs"; CompoundFile cf = new CompoundFile(); ICFStorage st = cf.RootStorage.AddStorage("MyStorage"); ICFStream sm = st.AddStream("MyStream"); byte[] b = Helpers.GetBuffer(220, 0x0A); sm.SetData(b); cf.Save(filename); cf.Close(); CompoundFile cf2 = new CompoundFile(filename); ICFStorage st2 = cf2.RootStorage.GetStorage("MyStorage"); ICFStream sm2 = st2.GetStream("MyStream"); cf2.Close(); Assert.IsNotNull(sm2); Assert.IsTrue(sm2.Size == 220); if (File.Exists(filename)) { File.Delete(filename); } }
public void Test_RE_WRITE_SMALLER_STREAM() { const int BUFFER_LENGTH = 8000; String filename = "report.xls"; byte[] b = Helpers.GetBuffer(BUFFER_LENGTH); CompoundFile cf = new CompoundFile(filename); ICFStream foundStream = cf.RootStorage.GetStream("Workbook"); foundStream.SetData(b); cf.Save("reportRW_SMALL.xls"); cf.Close(); cf = new CompoundFile("reportRW_SMALL.xls"); byte[] c = cf.RootStorage.GetStream("Workbook").GetData(); Assert.IsTrue(c.Length == BUFFER_LENGTH); cf.Close(); if (File.Exists("reportRW_SMALL.xls")) { File.Delete("reportRW_SMALL.xls"); } }
public void Test_WRITE_STREAM_WITH_DIFAT() { //const int SIZE = 15388609; //Incredible condition of 'resonance' between FAT and DIFAT sec number const int SIZE = 15345665; // 64 -> 65 NOT working (in the past ;-) ) byte[] b = Helpers.GetBuffer(SIZE, 0); CompoundFile cf = new CompoundFile(); ICFStream myStream = cf.RootStorage.AddStream("MyStream"); Assert.IsNotNull(myStream); myStream.SetData(b); cf.Save("WRITE_STREAM_WITH_DIFAT.cfs"); cf.Close(); CompoundFile cf2 = new CompoundFile("WRITE_STREAM_WITH_DIFAT.cfs"); ICFStream st = cf2.RootStorage.GetStream("MyStream"); Assert.IsNotNull(cf2); Assert.IsTrue(st.Size == SIZE); Assert.IsTrue(Helpers.CompareBuffer(b, st.GetData())); cf2.Close(); if (File.Exists("WRITE_STREAM_WITH_DIFAT.cfs")) { File.Delete("WRITE_STREAM_WITH_DIFAT.cfs"); } }
public void Test_TRANSACTED_REMOVE_MINI_STREAM_ADD_MINISTREAM_TO_EXISTING_FILE() { String srcFilename = "report.xls"; String dstFilename = "reportOverwrite2.xls"; File.Copy(srcFilename, dstFilename, true); CompoundFile cf = new CompoundFile(dstFilename, UpdateMode.Update, true, true); cf.RootStorage.Delete("\x05SummaryInformation"); byte[] buffer = Helpers.GetBuffer(2000); ICFStream addedStream = cf.RootStorage.AddStream("MyNewStream"); addedStream.SetData(buffer); cf.Commit(); cf.Close(); if (File.Exists("reportOverwrite2.xlsPP")) { File.Delete("reportOverwrite2.xlsPP"); } }
public void Test_ZERO_LENGTH_RE_WRITE_STREAM() { byte[] b = new byte[0]; CompoundFile cf = new CompoundFile(); ICFStream myStream = cf.RootStorage.AddStream("MyStream"); Assert.IsNotNull(myStream); try { myStream.SetData(b); } catch { Assert.Fail("Failed setting zero length stream"); } cf.Save("ZERO_LENGTH_STREAM_RE.cfs"); cf.Close(); CompoundFile cfo = new CompoundFile("ZERO_LENGTH_STREAM_RE.cfs"); ICFStream oStream = cfo.RootStorage.GetStream("MyStream"); Assert.IsNotNull(oStream); Assert.IsTrue(oStream.Size == 0); try { oStream.SetData(Helpers.GetBuffer(30)); cfo.Save("ZERO_LENGTH_STREAM_RE2.cfs"); } catch { Assert.Fail("Failed re-writing zero length stream"); } finally { cfo.Close(); } if (File.Exists("ZERO_LENGTH_STREAM_RE.cfs")) { File.Delete("ZERO_LENGTH_STREAM_RE.cfs"); } if (File.Exists("ZERO_LENGTH_STREAM_RE2.cfs")) { File.Delete("ZERO_LENGTH_STREAM_RE2.cfs"); } }
public void Test_TRANSACTED_ADD_REMOVE_MULTIPLE_STREAM_TO_EXISTING_FILE() { String srcFilename = "report.xls"; String dstFilename = "reportOverwriteMultiple.xls"; File.Copy(srcFilename, dstFilename, true); CompoundFile cf = new CompoundFile(dstFilename, UpdateMode.ReadOnly, true, false); //CompoundFile cf = new CompoundFile(); Random r = new Random(); for (int i = 0; i < 254; i++) { //byte[] buffer = Helpers.GetBuffer(r.Next(100, 3500), (byte)i); byte[] buffer = Helpers.GetBuffer(1995, 1); //if (i > 0) //{ // if (r.Next(0, 100) > 50) // { // cf.RootStorage.Delete("MyNewStream" + (i - 1).ToString()); // } //} ICFStream addedStream = cf.RootStorage.AddStream("MyNewStream" + i.ToString()); Assert.IsNotNull(addedStream, "Stream not found"); addedStream.SetData(buffer); Assert.IsTrue(Helpers.CompareBuffer(addedStream.GetData(), buffer), "Data buffer corrupted"); // Random commit, not on single addition //if (r.Next(0, 100) > 50) // cf.UpdateFile(); } cf.Save(dstFilename + "PP"); cf.Close(); if (File.Exists("reportOverwriteMultiple.xls")) { File.Delete("reportOverwriteMultiple.xls"); } if (File.Exists("reportOverwriteMultiple.xlsPP")) { File.Delete("reportOverwriteMultiple.xlsPP"); } }
public void Test_COMPARE_DIR_ENTRY_NAME_BUG_FIX_ID_3487353() { var f = new CompoundFile("report_name_fix.xls", UpdateMode.Update, true, true); ICFStream cfs = f.RootStorage.AddStream("Poorbook"); cfs.AppendData(Helpers.GetBuffer(20)); f.Commit(); f.Close(); f = new CompoundFile("report_name_fix.xls", UpdateMode.Update, true, true); cfs = f.RootStorage.GetStream("Workbook"); Assert.IsTrue(cfs.Name == "Workbook"); f.RootStorage.Delete("PoorBook"); f.Commit(); f.Close(); }
public void Test_COPY_FROM_STREAM() { byte[] b = Helpers.GetBuffer(100); MemoryStream ms = new MemoryStream(b); CompoundFile cf = new CompoundFile(); CFStream st = cf.RootStorage.AddStream("MyImportedStream") as CFStream; st.CopyFrom(ms); ms.Close(); cf.Save("COPY_FROM_STREAM.cfs"); cf.Close(); cf = new CompoundFile("COPY_FROM_STREAM.cfs"); byte[] data = cf.RootStorage.GetStream("MyImportedStream").GetData(); Assert.IsTrue(Helpers.CompareBuffer(b, data)); }
public void Test_WRITE_STREAM() { const int BUFFER_LENGTH = 10000; byte[] b = Helpers.GetBuffer(BUFFER_LENGTH); CompoundFile cf = new CompoundFile(); ICFStream myStream = cf.RootStorage.AddStream("MyStream"); Assert.IsNotNull(myStream); Assert.IsTrue(myStream.Size == 0); myStream.SetData(b); Assert.IsTrue(myStream.Size == BUFFER_LENGTH, "Stream size differs from buffer size"); cf.Close(); }
public void Test_DELETE_STREAM_SECTOR_REUSE() { CompoundFile cf = null; ICFStream st = null; byte[] b = Helpers.GetBuffer(1024 * 1024 * 2); //2MB buffer //byte[] b = Helpers.GetBuffer(5000); byte[] cmp = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; cf = new CompoundFile(CFSVersion.Ver_4, false, false); st = cf.RootStorage.AddStream("AStream"); st.AppendData(b); cf.Save("SectorRecycle.cfs"); cf.Close(); cf = new CompoundFile("SectorRecycle.cfs", UpdateMode.Update, true, false); cf.RootStorage.Delete("AStream"); cf.Commit(true); cf.Close(); cf = new CompoundFile("SectorRecycle.cfs", UpdateMode.ReadOnly, false, false); //No sector recycle st = cf.RootStorage.AddStream("BStream"); st.AppendData(Helpers.GetBuffer(1024 * 1024 * 1)); cf.Save("SectorRecycleLarger.cfs"); cf.Close(); Assert.IsFalse((new FileInfo("SectorRecycle.cfs").Length) >= (new FileInfo("SectorRecycleLarger.cfs").Length)); cf = new CompoundFile("SectorRecycle.cfs", UpdateMode.ReadOnly, true, false); st = cf.RootStorage.AddStream("BStream"); st.AppendData(Helpers.GetBuffer(1024 * 1024 * 1)); cf.Save("SectorRecycleSmaller.cfs"); cf.Close(); Assert.IsTrue((new FileInfo("SectorRecycle.cfs").Length) >= (new FileInfo("SectorRecycleSmaller.cfs").Length)); }
private void SingleWriteReadMatchingSTREAMED(int size) { MemoryStream ms = new MemoryStream(size); CompoundFile cf = new CompoundFile(); ICFStorage st = cf.RootStorage.AddStorage("MyStorage"); ICFStream sm = st.AddStream("MyStream"); byte[] b = Helpers.GetBuffer(size); sm.SetData(b); cf.Save(ms); cf.Close(); CompoundFile cf2 = new CompoundFile(ms); ICFStorage st2 = cf2.RootStorage.GetStorage("MyStorage"); ICFStream sm2 = st2.GetStream("MyStream"); Assert.IsNotNull(sm2); Assert.IsTrue(sm2.Size == size); Assert.IsTrue(Helpers.CompareBuffer(sm2.GetData(), b)); cf2.Close(); }
public void Test_RE_WRITE_SMALLER_MINI_STREAM() { String filename = "report.xls"; CompoundFile cf = new CompoundFile(filename); ICFStream foundStream = cf.RootStorage.GetStream("\x05SummaryInformation"); int TEST_LENGTH = (int)foundStream.Size - 20; byte[] b = Helpers.GetBuffer(TEST_LENGTH); foundStream.SetData(b); cf.Save("RE_WRITE_SMALLER_MINI_STREAM.xls"); cf.Close(); cf = new CompoundFile("RE_WRITE_SMALLER_MINI_STREAM.xls"); byte[] c = cf.RootStorage.GetStream("\x05SummaryInformation").GetData(); Assert.IsTrue(c.Length == TEST_LENGTH); cf.Close(); if (File.Exists("RE_WRITE_SMALLER_MINI_STREAM.xls")) { File.Delete("RE_WRITE_SMALLER_MINI_STREAM.xls"); } }
public void Test_WRITE_READ_CFS_VERSION_4_STREAM() { String filename = "WRITE_COMMIT_READ_CFS_V4.cfs"; CompoundFile cf = new CompoundFile(CFSVersion.Ver_4, true, true); ICFStorage st = cf.RootStorage.AddStorage("MyStorage"); ICFStream sm = st.AddStream("MyStream"); byte[] b = Helpers.GetBuffer(227); sm.SetData(b); cf.Save(filename); cf.Close(); CompoundFile cf2 = new CompoundFile(filename); ICFStorage st2 = cf2.RootStorage.GetStorage("MyStorage"); ICFStream sm2 = st2.GetStream("MyStream"); Assert.IsNotNull(sm2); Assert.IsTrue(sm2.Size == b.Length); cf2.Close(); }
public void Test_FUNCTIONAL_BEHAVIOUR() { const int N_FACTOR = 1; byte[] bA = Helpers.GetBuffer(20 * 1024 * N_FACTOR, 0x0A); byte[] bB = Helpers.GetBuffer(5 * 1024, 0x0B); byte[] bC = Helpers.GetBuffer(5 * 1024, 0x0C); byte[] bD = Helpers.GetBuffer(5 * 1024, 0x0D); byte[] bE = Helpers.GetBuffer(8 * 1024 * N_FACTOR + 1, 0x1A); byte[] bF = Helpers.GetBuffer(16 * 1024 * N_FACTOR, 0x1B); byte[] bG = Helpers.GetBuffer(14 * 1024 * N_FACTOR, 0x1C); byte[] bH = Helpers.GetBuffer(12 * 1024 * N_FACTOR, 0x1D); byte[] bE2 = Helpers.GetBuffer(8 * 1024 * N_FACTOR, 0x2A); byte[] bMini = Helpers.GetBuffer(1027, 0xEE); Stopwatch sw = new Stopwatch(); sw.Start(); //############ // Phase 1 var cf = new CompoundFile(CFSVersion.Ver_3, true, false); cf.RootStorage.AddStream("A").SetData(bA); cf.Save("OneStream.cfs"); cf.Close(); // Test Phase 1 var cfTest = new CompoundFile("OneStream.cfs"); ICFStream testSt = cfTest.RootStorage.GetStream("A"); Assert.IsNotNull(testSt); Assert.IsTrue(testSt.Size == bA.Length); Assert.IsTrue(Helpers.CompareBuffer(bA, testSt.GetData())); cfTest.Close(); //########### //Phase 2 cf = new CompoundFile("OneStream.cfs", UpdateMode.ReadOnly, true, false); cf.RootStorage.AddStream("B").SetData(bB); cf.RootStorage.AddStream("C").SetData(bC); cf.RootStorage.AddStream("D").SetData(bD); cf.RootStorage.AddStream("E").SetData(bE); cf.RootStorage.AddStream("F").SetData(bF); cf.RootStorage.AddStream("G").SetData(bG); cf.RootStorage.AddStream("H").SetData(bH); cf.Save("8_Streams.cfs"); cf.Close(); // Test Phase 2 cfTest = new CompoundFile("8_Streams.cfs"); testSt = cfTest.RootStorage.GetStream("B"); Assert.IsNotNull(testSt); Assert.IsTrue(testSt.Size == bB.Length); Assert.IsTrue(Helpers.CompareBuffer(bB, testSt.GetData())); testSt = cfTest.RootStorage.GetStream("C"); Assert.IsNotNull(testSt); Assert.IsTrue(testSt.Size == bC.Length); Assert.IsTrue(Helpers.CompareBuffer(bC, testSt.GetData())); testSt = cfTest.RootStorage.GetStream("D"); Assert.IsNotNull(testSt); Assert.IsTrue(testSt.Size == bD.Length); Assert.IsTrue(Helpers.CompareBuffer(bD, testSt.GetData())); testSt = cfTest.RootStorage.GetStream("E"); Assert.IsNotNull(testSt); Assert.IsTrue(testSt.Size == bE.Length); Assert.IsTrue(Helpers.CompareBuffer(bE, testSt.GetData())); testSt = cfTest.RootStorage.GetStream("F"); Assert.IsNotNull(testSt); Assert.IsTrue(testSt.Size == bF.Length); Assert.IsTrue(Helpers.CompareBuffer(bF, testSt.GetData())); testSt = cfTest.RootStorage.GetStream("G"); Assert.IsNotNull(testSt); Assert.IsTrue(testSt.Size == bG.Length); Assert.IsTrue(Helpers.CompareBuffer(bG, testSt.GetData())); testSt = cfTest.RootStorage.GetStream("H"); Assert.IsNotNull(testSt); Assert.IsTrue(testSt.Size == bH.Length); Assert.IsTrue(Helpers.CompareBuffer(bH, testSt.GetData())); cfTest.Close(); File.Copy("8_Streams.cfs", "6_Streams.cfs", true); File.Delete("8_Streams.cfs"); //########### // Phase 3 cf = new CompoundFile("6_Streams.cfs", UpdateMode.Update, true, true); cf.RootStorage.Delete("D"); cf.RootStorage.Delete("G"); cf.Commit(); cf.Close(); //Test Phase 3 cfTest = new CompoundFile("6_Streams.cfs"); bool catched = false; try { testSt = cfTest.RootStorage.GetStream("D"); } catch (Exception ex) { if (ex is CFItemNotFound) { catched = true; } } Assert.IsTrue(catched); catched = false; try { testSt = cfTest.RootStorage.GetStream("G"); } catch (Exception ex) { if (ex is CFItemNotFound) { catched = true; } } Assert.IsTrue(catched); cfTest.Close(); //########## // Phase 4 File.Copy("6_Streams.cfs", "6_Streams_Shrinked.cfs", true); CompoundFile.ShrinkCompoundFile("6_Streams_Shrinked.cfs"); // Test Phase 4 Assert.IsTrue(new FileInfo("6_Streams_Shrinked.cfs").Length < new FileInfo("6_Streams.cfs").Length); cfTest = new CompoundFile("6_Streams_Shrinked.cfs"); VisitedEntryAction va = delegate(ICFItem item) { if (item.IsStream) { ICFStream ia = item as ICFStream; Assert.IsNotNull(ia); Assert.IsTrue(ia.Size > 0); byte[] d = ia.GetData(); Assert.IsNotNull(d); Assert.IsTrue(d.Length > 0); Assert.IsTrue(d.Length == ia.Size); } }; cfTest.RootStorage.VisitEntries(va, true); cfTest.Close(); //########## //Phase 5 cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.Update, true, false); cf.RootStorage.AddStream("ZZZ").SetData(bF); cf.RootStorage.GetStream("E").AppendData(bE2); cf.Commit(); cf.Close(); cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.Update, true, false); cf.RootStorage.CLSID = new Guid("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"); cf.Commit(); cf.Close(); cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.Update, true, false); cf.RootStorage.AddStorage("MyStorage").AddStream("ANS").AppendData(bE); cf.Commit(); cf.Close(); cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.Update, true, false); cf.RootStorage.AddStorage("AnotherStorage").AddStream("ANS").AppendData(bE); cf.RootStorage.Delete("MyStorage"); cf.Commit(); cf.Close(); //Test Phase 5 //##### //Phase 6 cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.Update, true, false); cf.RootStorage.AddStorage("MiniStorage").AddStream("miniSt").AppendData(bMini); cf.RootStorage.GetStorage("MiniStorage").AddStream("miniSt2").AppendData(bMini); cf.Commit(); cf.Close(); cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.Update, true, false); cf.RootStorage.GetStorage("MiniStorage").Delete("miniSt"); cf.RootStorage.GetStorage("MiniStorage").GetStream("miniSt2").AppendData(bE); cf.Commit(); cf.Close(); //Test Phase 6 cfTest = new CompoundFile("6_Streams_Shrinked.cfs"); byte[] d2 = cfTest.RootStorage.GetStorage("MiniStorage").GetStream("miniSt2").GetData(); Assert.IsTrue(d2.Length == (bE.Length + bMini.Length)); int cnt = 1; d2 = cfTest.RootStorage.GetStorage("MiniStorage").GetStream("miniSt2").GetData(bMini.Length, ref cnt); Assert.IsTrue(cnt == 1); Assert.IsTrue(d2.Length == 1); Assert.IsTrue(d2[0] == 0x1A); cnt = 1; d2 = cfTest.RootStorage.GetStorage("MiniStorage").GetStream("miniSt2").GetData(bMini.Length - 1, ref cnt); Assert.IsTrue(cnt == 1); Assert.IsTrue(d2.Length == 1); Assert.IsTrue(d2[0] == 0xEE); try { cfTest.RootStorage.GetStorage("MiniStorage").GetStream("miniSt"); } catch (Exception ex) { Assert.IsTrue(ex is CFItemNotFound); } cfTest.Close(); //############## //Phase 7 cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.Update, true, false); cf.RootStorage.GetStorage("MiniStorage").GetStream("miniSt2").SetData(bA); cf.Commit(); cf.Close(); //Test Phase 7 cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.Update, true, false); d2 = cf.RootStorage.GetStorage("MiniStorage").GetStream("miniSt2").GetData(); Assert.IsNotNull(d2); Assert.IsTrue(d2.Length == bA.Length); cf.Close(); //############## cf = new CompoundFile("6_Streams_Shrinked.cfs", UpdateMode.ReadOnly, true, false); var myStream = cf.RootStorage.GetStream("C"); var data = myStream.GetData(); Console.WriteLine(data[0] + " : " + data[data.Length - 1]); myStream = cf.RootStorage.GetStream("B"); data = myStream.GetData(); Console.WriteLine(data[0] + " : " + data[data.Length - 1]); cf.Close(); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); }
public void Test_WRITE_MINISTREAM_READ_REWRITE_STREAM() { const int BIGGER_SIZE = 350; //const int SMALLER_SIZE = 290; const int MEGA_SIZE = 18000000; byte[] ba1 = Helpers.GetBuffer(BIGGER_SIZE, 1); byte[] ba2 = Helpers.GetBuffer(BIGGER_SIZE, 2); byte[] ba3 = Helpers.GetBuffer(BIGGER_SIZE, 3); byte[] ba4 = Helpers.GetBuffer(BIGGER_SIZE, 4); byte[] ba5 = Helpers.GetBuffer(BIGGER_SIZE, 5); //WRITE 5 (mini)streams in a compound file -- CompoundFile cfa = new CompoundFile(); ICFStream myStream = cfa.RootStorage.AddStream("MyFirstStream"); Assert.IsNotNull(myStream); myStream.SetData(ba1); Assert.IsTrue(myStream.Size == BIGGER_SIZE); ICFStream myStream2 = cfa.RootStorage.AddStream("MySecondStream"); Assert.IsNotNull(myStream2); myStream2.SetData(ba2); Assert.IsTrue(myStream2.Size == BIGGER_SIZE); ICFStream myStream3 = cfa.RootStorage.AddStream("MyThirdStream"); Assert.IsNotNull(myStream3); myStream3.SetData(ba3); Assert.IsTrue(myStream3.Size == BIGGER_SIZE); ICFStream myStream4 = cfa.RootStorage.AddStream("MyFourthStream"); Assert.IsNotNull(myStream4); myStream4.SetData(ba4); Assert.IsTrue(myStream4.Size == BIGGER_SIZE); ICFStream myStream5 = cfa.RootStorage.AddStream("MyFifthStream"); Assert.IsNotNull(myStream5); myStream5.SetData(ba5); Assert.IsTrue(myStream5.Size == BIGGER_SIZE); cfa.Save("WRITE_MINISTREAM_READ_REWRITE_STREAM.cfs"); cfa.Close(); // Now get the second stream and rewrite it smaller byte[] bb = Helpers.GetBuffer(MEGA_SIZE); CompoundFile cfb = new CompoundFile("WRITE_MINISTREAM_READ_REWRITE_STREAM.cfs"); ICFStream myStreamB = cfb.RootStorage.GetStream("MySecondStream"); Assert.IsNotNull(myStreamB); myStreamB.SetData(bb); Assert.IsTrue(myStreamB.Size == MEGA_SIZE); byte[] bufferB = myStreamB.GetData(); cfb.Save("WRITE_MINISTREAM_READ_REWRITE_STREAM_2ND.cfs"); cfb.Close(); CompoundFile cfc = new CompoundFile("WRITE_MINISTREAM_READ_REWRITE_STREAM_2ND.cfs"); ICFStream myStreamC = cfc.RootStorage.GetStream("MySecondStream"); Assert.IsTrue(myStreamC.Size == MEGA_SIZE, "DATA SIZE FAILED"); byte[] bufferC = myStreamC.GetData(); Assert.IsTrue(Helpers.CompareBuffer(bufferB, bufferC), "DATA INTEGRITY FAILED"); cfc.Close(); if (File.Exists("WRITE_MINISTREAM_READ_REWRITE_STREAM.cfs")) { File.Delete("WRITE_MINISTREAM_READ_REWRITE_STREAM.cfs"); } if (File.Exists("WRITE_MINISTREAM_READ_REWRITE_STREAM_2ND.cfs")) { File.Delete("WRITE_MINISTREAM_READ_REWRITE_STREAM_2ND.cfs"); } }