c# - C# 中的 C 方法 Fread() 等效项

标签 c# c

我正在开发 LOTUS Notes API,在这个过程中我遇到了这样的情况,

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

最佳答案

看起来您需要使用 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);
}

关于c# - C# 中的 C 方法 Fread() 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320087/

相关文章:

c - ATmega16 编程器寄存器不匹配

c - 如何让Ctrl-c结束程序

c# - 如何从 xamarin.forms 调用平台特定页面

c# - C# 中抛出 TypeCast 运算符异常

c - 尝试在控制台上进行子类化

C 错误指令定义的行为

c - libxml2.so Init/CleanupParser 用于带线程的多进程

c# - 如何使用 dotnet sln 将所有项目添加到单个解决方案?

c# - 带有 FileUpload 控件的进度指示器

c# - XNA 不跳平台