将大的“ref byte”块复制到文件中

时间:2013-10-07 17:52:45

标签: c# pinvoke

我正在努力解决将DLL作为ref byte复制的大数据复制到文件的最佳方法。
因为它是一个视频流(或数百个),所以我不太习惯在循环中使用Marhal.Copy / WriteByte等等。但更直接的东西。
我对ref byte非常感兴趣,遗憾的是没有太多关于它的事情 无论如何,我正在考虑P / Invoke WriteFile,但它得到IntPtr我可以从ref byte得到的最接近byte*(使用fixed) 。
现在,我将拥有几百个这样的流,每个流可以达到~2Mbps 所以在底线 - 我正在寻找一种有效的方法将ref byte块复制到一个文件中(当然具有给定的数组大小)。

1 个答案:

答案 0 :(得分:0)

如果有人会感兴趣,并且感谢史密斯先生,我首先将给定的DllImport从ref byte声明更改为IntPtr
然后我导入WriteFile

[DllImport("kernel32.dll")]
    private static extern bool WriteFile(IntPtr hFile, IntPtr lpBuffer, int NumberOfBytesToWrite, out int lpNumberOfBytesWritten, IntPtr lpOverlapped);

并按如下方式使用:

//somewhere in class:
tmpFileStream = new FileStream("tmp.bin", FileMode.Create, FileAccess.Write);

public void AddBuffer(IntPtr buffer, int size)
{
    int written;
    WriteFile(tmpFileStream.SafeFileHandle.DangerousGetHandle(), buffer, size, out written, IntPtr.Zero);
}