我一直在尝试将以下Delphi代码转换为C#。我以前从未使用过Delphi。我一直遇到有关FileStream
的几个错误。
无法从RAMPhdrrec转换为byte []
Read(byte [],int,int)的最佳重载匹配具有一些无效参数
另外,我无法在C#中引用结构中的任何字段。
以下是TFileStream
的Delphi定义:
function Read(var Buffer; Count: Longint): Longint; virtual; abstract;
和C#
:
FileStream.Read Method (Byte[], Int32, Int32)
Delphi代码如何仅使用两个参数?
德尔福代码:
CONST
HeaderSize=128;
Type
RAMPhdrrec = packed record
//Other fields
FirstRAMPtime: TDateTime;
LastRAMPTime: TDateTime;
end;
var
Header:RAMPhdrrec;
Function TestingForm.Testing(PathName:String):Boolean;
StartTime:TDateTime;
EndTime:TDateTime;
begin
if RampOpen then
begin
RampStream.Free;
end;
Try
RampStream:=TFileStream.Create(PathName,fmOpenReadWrite OR fmShareExclusive );
except
ShowMessage(//error message here);
Testing:=false;
RampOpen:=False;
end;
try
RampStream.Read(Header,HeaderSize);
StartTime:=Header.FirstRAMPtime;
EndTime:=Header.LastRAMPTime;
这是C#:
const int HeaderSize = 128;
public struct RAMPhdrrec
{
double FirstRAMPtime;
double LastRAMPTime;
}
RAMPhdrrec Header;
public Boolean Testing(string PathName)
{
double StartTime, EndTime;
try
{
RampStream = new FileStream(PathName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch
{
System.Windows.MessageBox.Show("//error message here");
RampOpen = false;
return false;
}
try
{
RampStream.Read(Header, HeaderSize); //error
}
catch
{
return false;
}
return true;
}
答案 0 :(得分:0)
我相信这个C#代码相当于上面的Delphi代码。
BinaryReader br = new BinaryReader(new FileStream(PathName,
FileMode.Open,
FileAccess.ReadWrite,
FileShare.None));
StartTime = br.readDouble();
EndTime = br.readDouble();
在Delphi中,System.TDateTime
是Double
类型的别名,其中整数部分是自18/30/18/99以来的天数,小数部分是已经过去的24小时日的一小部分。见TDateTime documentation。因此,如果您需要将其转换为C#DateTime,则需要手动转换它。