C语言C#中的Fread()等价性

时间:2013-03-10 07:48:05

标签: c# c

我正在研究LOTUS Notes API,在这个过程中我来到了像这样的fucntio,

bytesRead = fread (Buffer, 1, (WORD) Length, hCDFile);

现在我发现了一些C#等效方法,它在while循环中运行。在第一次迭代时,该方法似乎工作正常(当我调试c版本的代码和C#版本时结果相同)。但在第二次迭代中,假设dwLengthHost = 35的值, 在此方法之前,我称之为另一种方法

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

[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;
}

1 个答案:

答案 0 :(得分:1)

看起来您需要使用FileStream

您可以使用File.Open

创建它

完全相同的行为:

bytesRead = fread (Buffer, 1, (WORD) Length, hCDFile); 

应该提供以下C#代码

bytesRead = file.Read(Buffer, 0, Length)

完整示例可能正在关注

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