C# C中的C方法Fread()等价性#

C# C中的C方法Fread()等价性#,c#,c,C#,C,我正在开发LOTUS Notes API,在这个过程中,我遇到了这样一个问题,Functio bytesRead = fread (Buffer, 1, (WORD) Length, hCDFile); 现在我发现了一些C#等价的方法,比如,它在while循环中运行。在第一次迭代时,该方法似乎运行良好(当我调试C版本的代码和C#版本时,结果是相同的)。但在第二次迭代中,假设dwLengthHost的值为35, 在这个方法之前,我调用了另一个方法 NSFDUMPReadFromFile(hCDF

我正在开发LOTUS Notes API,在这个过程中,我遇到了这样一个问题,Functio

bytesRead = fread (Buffer, 1, (WORD) Length, hCDFile);
现在我发现了一些C#等价的方法,比如,它在while循环中运行。在第一次迭代时,该方法似乎运行良好(当我调试C版本的代码和C#版本时,结果是相同的)。但在第二次迭代中,假设dwLengthHost的值为35, 在这个方法之前,我调用了另一个方法

NSFDUMPReadFromFile(hCDFile,ref RecordTypeCanonicalPtr,sizeof(ushort))
调用
fread
函数并给出值
RecordTypeCanonicalPtr=149
。但之后,当稍后调用相同的方法时,
RecordTypeCanonicalPtr
dwLengthHost
值会自动更改

[DllImport("msvcrt.dll")]
public static extern UInt32 fread(ref IntPtr Buffer, uint Size, uint Count, IntPtr Stream);

private bool NSFDUMPReadFromFile(IntPtr hCDFile,
                                        ref IntPtr Buffer,
                                        UInt32 Length)
{
    UInt32 bytesRead = NotesApi.fread(ref Buffer, 1, (uint)Length, hCDFile);
    /* Read bytes from the file */ 
    if (bytesRead == Length)
        return true;
    else
        return false;
}

看起来你需要使用

您可以使用

与以下行为完全相同:

bytesRead = fread (Buffer, 1, (WORD) Length, hCDFile); 
应提供以下C#代码

完整的例子可能如下

using(file = File.Open("test.bin", FileMode.Open))
{
    var length = 256;
    var buffer = new byte[length];
    var bytesRead = file.Read(buffer, 0, length);
}

嗨,谢谢你的回复。实际上,我必须使用指针,这个方法用于不同的条件。在某些情况下,它返回databuffer,即某些大小写记录类型。所以不要认为上述方法适用于所有情况。您是使用IntPtr还是使用文件中光标位置的指针?如果您使用的是IntPtr,则没有任何方法可以从盒子中读取适合您用途的文件。但你们无论如何都可以使用建议的方法来读取文件,只有在那个之后,你们需要使用Hi-all将字节数组复制到非托管内存中,实际上我找到了mscrolib.dll,这帮了我的忙。
using(file = File.Open("test.bin", FileMode.Open))
{
    var length = 256;
    var buffer = new byte[length];
    var bytesRead = file.Read(buffer, 0, length);
}