C# C中的C方法Fread()等价性#
我正在开发LOTUS Notes API,在这个过程中,我遇到了这样一个问题,FunctioC# 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
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);
}