public void Test_DIFAT_CHECK() { CompoundFile f = null; try { f = new CompoundFile(); CFStream st = f.RootStorage.AddStream("LargeStream"); st.Append(Helpers.GetBuffer(20000000, 0x0A)); //Forcing creation of two DIFAT sectors byte[] b1 = Helpers.GetBuffer(3, 0x0B); st.Append(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 = new byte[cnt]; cnt = f.RootStorage.GetStream("LargeStream").Read(b2, 20000000, 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_FIX_BUG_GH_14_GH15() { String filename = "MyFile.dat"; String storageName = "MyStorage"; String streamName = "MyStream"; int BUFFER_SIZE = 800 * Mb; int iterationCount = 1; int streamCount = 3; CompoundFile compoundFileInit = new CompoundFile(CFSVersion.Ver_4, CFSConfiguration.Default); compoundFileInit.Save(filename); compoundFileInit.Close(); CompoundFile compoundFile = new CompoundFile(filename, CFSUpdateMode.Update, CFSConfiguration.Default); CFStorage st = compoundFile.RootStorage.AddStorage(storageName); byte b = 0X0A; byte[] buffer = new byte[BUFFER_SIZE]; for (int streamId = 0; streamId < streamCount; ++streamId) { #if NETCOREAPP Array.Fill(buffer, b); #else for (int i = 0; i < buffer.Length; i++) { buffer[i] = b; } #endif CFStream sm = st.AddStream(streamName + streamId); for (int iteration = 0; iteration < iterationCount; ++iteration) { sm.Append(buffer); compoundFile.Commit(); } b++; } compoundFile.Close(); buffer = null; compoundFile = new CompoundFile(filename, CFSUpdateMode.ReadOnly, CFSConfiguration.Default); byte[] testBuffer = new byte[100]; byte t = 0x0A; for (int streamId = 0; streamId < streamCount; ++streamId) { compoundFile.RootStorage.GetStorage(storageName).GetStream(streamName + streamId).Read(testBuffer, BUFFER_SIZE / 2, 100); Assert.IsTrue(testBuffer.All(g => g == t)); compoundFile.RootStorage.GetStorage(storageName).GetStream(streamName + streamId).Read(testBuffer, BUFFER_SIZE - 101, 100); Assert.IsTrue(testBuffer.All(g => g == t)); compoundFile.RootStorage.GetStorage(storageName).GetStream(streamName + streamId).Read(testBuffer, 0, 100); Assert.IsTrue(testBuffer.All(g => g == t)); t++; } compoundFile.Close(); }
public void Test_DELETE_STREAM_SECTOR_REUSE() { CompoundFile cf = null; CFStream st = null; byte[] b = Helpers.GetBuffer(1024 * 1024 * 2); //2MB buffer byte[] cmp = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; cf = new CompoundFile(CFSVersion.Ver_4, CFSConfiguration.Default); st = cf.RootStorage.AddStream("AStream"); st.Append(b); cf.Save("SectorRecycle.cfs"); cf.Close(); cf = new CompoundFile("SectorRecycle.cfs", CFSUpdateMode.Update, CFSConfiguration.SectorRecycle); cf.RootStorage.Delete("AStream"); cf.Commit(true); cf.Close(); cf = new CompoundFile("SectorRecycle.cfs", CFSUpdateMode.ReadOnly, CFSConfiguration.Default); //No sector recycle st = cf.RootStorage.AddStream("BStream"); st.Append(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", CFSUpdateMode.ReadOnly, CFSConfiguration.SectorRecycle); st = cf.RootStorage.AddStream("BStream"); st.Append(Helpers.GetBuffer(1024 * 1024 * 1)); cf.Save("SectorRecycleSmaller.cfs"); cf.Close(); long larger = (new FileInfo("SectorRecycle.cfs").Length); long smaller = (new FileInfo("SectorRecycleSmaller.cfs").Length); Assert.IsTrue(larger >= smaller, "Larger size:" + larger.ToString() + " - Smaller size:" + smaller.ToString()); }
public void Test_FIX_BUG_GH_14() { String filename = "MyFile.dat"; String storageName = "MyStorage"; String streamName = "MyStream"; int BUFFER_SIZE = 800 * Mb; int iterationCount = 3; int streamCount = 3; CompoundFile compoundFileInit = new CompoundFile(CFSVersion.Ver_4, CFSConfiguration.Default); compoundFileInit.Save(filename); compoundFileInit.Close(); CompoundFile compoundFile = new CompoundFile(filename, CFSUpdateMode.Update, CFSConfiguration.Default); CFStorage st = compoundFile.RootStorage.AddStorage(storageName); byte b = 0X0A; for (int streamId = 0; streamId < streamCount; ++streamId) { CFStream sm = st.AddStream(streamName + streamId); for (int iteration = 0; iteration < iterationCount; ++iteration) { sm.Append(Helpers.GetBuffer(BUFFER_SIZE, b)); compoundFile.Commit(); } b++; } compoundFile.Close(); compoundFile = new CompoundFile(filename, CFSUpdateMode.ReadOnly, CFSConfiguration.Default); byte[] testBuffer = new byte[100]; byte t = 0x0A; for (int streamId = 0; streamId < streamCount; ++streamId) { compoundFile.RootStorage.GetStorage(storageName).GetStream(streamName + streamId).Read(testBuffer, BUFFER_SIZE / 2, 100); Assert.IsTrue(testBuffer.All(g => g == t)); compoundFile.RootStorage.GetStorage(storageName).GetStream(streamName + streamId).Read(testBuffer, BUFFER_SIZE - 101, 100); Assert.IsTrue(testBuffer.All(g => g == t)); compoundFile.RootStorage.GetStorage(storageName).GetStream(streamName + streamId).Read(testBuffer, 0, 100); Assert.IsTrue(testBuffer.All(g => g == t)); t++; } compoundFile.Close(); }
public void Test_COMPARE_DIR_ENTRY_NAME_BUG_FIX_ID_3487353() { var f = new CompoundFile("report_name_fix.xls", CFSUpdateMode.Update, CFSConfiguration.SectorRecycle | CFSConfiguration.EraseFreeSectors); CFStream cfs = f.RootStorage.AddStream("Poorbook"); cfs.Append(Helpers.GetBuffer(20)); f.Commit(); f.Close(); f = new CompoundFile("report_name_fix.xls", CFSUpdateMode.Update, CFSConfiguration.SectorRecycle | CFSConfiguration.EraseFreeSectors); cfs = f.RootStorage.GetStream("Workbook"); Assert.IsTrue(cfs.Name == "Workbook"); f.RootStorage.Delete("PoorBook"); f.Commit(); f.Close(); }
public void Test_ADD_LARGE_NUMBER_OF_ITEMS() { int ITEM_NUMBER = 10000; CompoundFile f = null; byte[] buffer = Helpers.GetBuffer(10, 0x0A); try { f = new CompoundFile(); for (int i = 0; i < ITEM_NUMBER; i++) { CFStream st = f.RootStorage.AddStream("Stream" + i.ToString()); st.Append(buffer); } if (File.Exists("$ItemsLargeNumber.cfs")) { File.Delete("$ItemsLargeNumber.cfs"); } f.Save("$ItemsLargeNumber.cfs"); f.Close(); f = new CompoundFile("$ItemsLargeNumber.cfs"); CFStream cfs = f.RootStorage.GetStream("Stream" + (ITEM_NUMBER / 2).ToString()); Assert.IsTrue(cfs != null, "Item is null"); Assert.IsTrue(Helpers.CompareBuffer(cfs.GetData(), buffer), "Items are different"); f.Close(); } catch (Exception ex) { Assert.Fail(ex.Message); } finally { //if (File.Exists("$ItemsLargeNumber.cfs")) // File.Delete("$ItemsLargeNumber.cfs"); } }
public void Test_APPEND_DATA_TO_STREAM() { MemoryStream ms = new MemoryStream(); byte[] b = new byte[] { 0x0, 0x1, 0x2, 0x3 }; byte[] b2 = new byte[] { 0x4, 0x5, 0x6, 0x7 }; CompoundFile cf = new CompoundFile(); CFStream st = cf.RootStorage.AddStream("MyMiniStream"); st.SetData(b); st.Append(b2); cf.Save(ms); cf.Close(); byte[] cmp = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; cf = new CompoundFile(ms); byte[] data = cf.RootStorage.GetStream("MyMiniStream").GetData(); Assert.IsTrue(Helpers.CompareBuffer(cmp, data)); }
public void Test_FIX_BUG_GH_15() { String filename = "MyFile.dat"; String storageName = "MyStorage"; String streamName = "MyStream"; int BUFFER_SIZE = 800 * Mb; int iterationCount = 6; int streamCount = 1; CompoundFile compoundFile = new CompoundFile(CFSVersion.Ver_4, CFSConfiguration.Default); CFStorage st = compoundFile.RootStorage.AddStorage(storageName); for (int streamId = 0; streamId < streamCount; ++streamId) { CFStream sm = st.AddStream(streamName + streamId); for (int iteration = 0; iteration < iterationCount; ++iteration) { byte b = (byte)(0x0A + iteration); sm.Append(Helpers.GetBuffer(BUFFER_SIZE, b)); } } compoundFile.Save(filename); compoundFile.Close(); byte[] readBuffer = new byte[15]; compoundFile = new CompoundFile(filename); byte c = 0x0A; for (int i = 0; i < iterationCount; i++) { compoundFile.RootStorage.GetStorage(storageName).GetStream(streamName + 0.ToString()).Read(readBuffer, ((long)BUFFER_SIZE + ((long)BUFFER_SIZE * i)) - 15, 15); Assert.IsTrue(readBuffer.All(by => by == c)); c++; } compoundFile.Close(); }
internal static void StressMemory() { const int N_LOOP = 20; const int MB_SIZE = 10; byte[] b = GetBuffer(1024 * 1024 * MB_SIZE); //2GB buffer byte[] cmp = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; CompoundFile cf = new CompoundFile(CFSVersion.Ver_4, CFSConfiguration.Default); CFStream st = cf.RootStorage.AddStream("MySuperLargeStream"); cf.Save("LARGE.cfs"); cf.Close(); //Console.WriteLine("Closed save"); //Console.ReadKey(); cf = new CompoundFile("LARGE.cfs", CFSUpdateMode.Update, CFSConfiguration.Default); CFStream cfst = cf.RootStorage.GetStream("MySuperLargeStream"); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < N_LOOP; i++) { cfst.Append(b); cf.Commit(true); Console.WriteLine(" Updated " + i.ToString()); //Console.ReadKey(); } cfst.Append(cmp); cf.Commit(true); sw.Stop(); cf.Close(); Console.WriteLine(sw.Elapsed.TotalMilliseconds); sw.Reset(); //Console.WriteLine(sw.Elapsed.TotalMilliseconds); //Console.WriteLine("Closed Transacted"); //Console.ReadKey(); cf = new CompoundFile("LARGE.cfs"); int count = 8; sw.Reset(); sw.Start(); byte[] data = new byte[count]; count = cf.RootStorage.GetStream("MySuperLargeStream").Read(data, b.Length * (long)N_LOOP, count); sw.Stop(); Console.Write(count); cf.Close(); Console.WriteLine("Closed Final " + sw.ElapsedMilliseconds); Console.ReadKey(); }