BinaryReader GetStreamReader(OleStorage storage, string streamName) { OleStream stream = storage.OpenStream(streamName); if (stream == null) { return(null); } return(GetReader(stream)); }
public static VCSolutionOptions Read(string InputFileName) { IOleStorage Storage = null; StgOpenStorage(InputFileName, null, STGM.Direct | STGM.Read | STGM.ShareExclusive, IntPtr.Zero, 0, out Storage); try { IOleEnumSTATSTG Enumerator = null; Storage.EnumElements(0, IntPtr.Zero, 0, out Enumerator); try { uint Fetched; STATSTG[] Stats = new STATSTG[200]; Enumerator.Next((uint)Stats.Length, Stats, out Fetched); VCSolutionOptions Options = new VCSolutionOptions(); foreach (STATSTG Stat in Stats) { if (Stat.pwcsName == "SolutionConfiguration") { IOleStream OleStream; Storage.OpenStream(Stat.pwcsName, IntPtr.Zero, STGM.Read | STGM.ShareExclusive, 0, out OleStream); try { uint SizeRead; byte[] Buffer = new byte[Stat.cbSize]; OleStream.Read(Buffer, (uint)Stat.cbSize, out SizeRead); using (MemoryStream InputStream = new MemoryStream(Buffer, false)) { BinaryReader Reader = new BinaryReader(InputStream, Encoding.Unicode); while (InputStream.Position < InputStream.Length) { Options.SolutionConfiguration.Add(VCBinarySetting.Read(Reader)); } } } finally { Marshal.ReleaseComObject(OleStream); } } } return(Options); } finally { Marshal.ReleaseComObject(Enumerator); } } finally { Marshal.ReleaseComObject(Storage); } }
// private methods ... BinaryReader GetReader(OleStream stream) { if (stream == null) { return(null); } byte[] streamData = stream.ReadToEnd(); MemoryStream memoryStream = new MemoryStream(streamData); return(new BinaryReader(memoryStream)); }
private BinaryReader GetReader(OleStream stream) { if (stream == null) { return(null); } byte[] buffer = stream.ReadToEnd(); MemoryStream input = new MemoryStream(buffer); return(new BinaryReader(input)); }
public bool WriteToRVTFile(string rvtFilePath, BasicFileInfo basicFileInfo) { if (!File.Exists(rvtFilePath)) { return(false); } StorageMode grfMode = StorageMode.ReadWrite | StorageMode.ShareExclusive; OleRootStorage oleRootStorage = new OleRootStorage(); string text = null; try { if (!oleRootStorage.Open(rvtFilePath, (int)grfMode)) { return(false); } var modelDataStreamIdentifier = new ModelDataStreamIdentifier(ModelDataStreamType.mdstBasicFileInfo); OleStream oleStream = oleRootStorage.OpenStream(modelDataStreamIdentifier.StreamName, grfMode); text = Path.GetTempFileName(); if (!WriteToStreamFile(text, basicFileInfo)) { return(false); } if (!oleStream.Import(text)) { return(false); } oleStream.Commit(); oleRootStorage.Commit(); } catch (Exception) { return(false); } finally { if (text != null) { try { File.Delete(text); } catch (Exception) { } } oleRootStorage.Close(isSave: true); } return(true); }
public BasicFileInfo ReadFromRVTFile(string rvtFilePath) { if (!File.Exists(rvtFilePath)) { return(null); } StorageMode grfMode = StorageMode.ReadWrite | StorageMode.ShareExclusive; OleRootStorage oleRootStorage = new OleRootStorage(); BasicFileInfo basicFileInfo = null; string text = null; try { if (!oleRootStorage.Open(rvtFilePath, (int)grfMode)) { return(null); } var modelDataStreamIdentifier = new ModelDataStreamIdentifier(ModelDataStreamType.mdstProjectInformation); OleStream oleStream = oleRootStorage.OpenStream(modelDataStreamIdentifier.StreamName, grfMode); text = Path.GetTempFileName(); if (!oleStream.Export(text)) { return(null); } return(ReadFromStreamFile(text)); } catch (Exception ex) { return(null); } finally { if (text != null) { try { File.Delete(text); } catch (Exception) { } } oleRootStorage.Close(isSave: false); } }
public VCOleContainer(string InputFileName) { IOleStorage Storage = null; StgOpenStorage(InputFileName, null, STGM.Direct | STGM.Read | STGM.ShareExclusive, IntPtr.Zero, 0, out Storage); try { IOleEnumSTATSTG Enumerator = null; Storage.EnumElements(0, IntPtr.Zero, 0, out Enumerator); try { uint Fetched; STATSTG[] Stats = new STATSTG[200]; Enumerator.Next((uint)Stats.Length, Stats, out Fetched); for (uint Idx = 0; Idx < Fetched; Idx++) { IOleStream OleStream; Storage.OpenStream(Stats[Idx].pwcsName, IntPtr.Zero, STGM.Read | STGM.ShareExclusive, 0, out OleStream); try { uint SizeRead; byte[] Buffer = new byte[Stats[Idx].cbSize]; OleStream.Read(Buffer, (uint)Stats[Idx].cbSize, out SizeRead); Sections.Add(new KeyValuePair <string, byte[]>(Stats[Idx].pwcsName, Buffer)); } finally { Marshal.ReleaseComObject(OleStream); } } } finally { Marshal.ReleaseComObject(Enumerator); } } finally { Marshal.ReleaseComObject(Storage); } }