Я работаю со сторонним компонентом, который возвращает объект IStream (System.Runtime.InteropServices.ComTypes.IStream). Мне нужно взять данные из этого IStream и записать их в файл. Мне удалось это сделать, но я не очень доволен кодом.
Поскольку "strm" является моим IStream, вот мой тестовый код...
// access the structure containing statistical info about the stream
System.Runtime.InteropServices.ComTypes.STATSTG stat;
strm.Stat(out stat, 0);
System.IntPtr myPtr = (IntPtr)0;
// get the "cbSize" member from the stat structure
// this is the size (in bytes) of our stream.
int strmSize = (int)stat.cbSize; // *** DANGEROUS *** (long to int cast)
byte[] strmInfo = new byte[strmSize];
strm.Read(strmInfo, strmSize, myPtr);
string outFile = @"c:\test.db3";
File.WriteAllBytes(outFile, strmInfo);
По крайней мере, мне не нравится приведение long к int, как указано выше, но мне интересно, нет ли лучшего способа получить исходную длину потока, чем приведенный выше? Я немного новичок в C#, поэтому спасибо за любые указатели.