[英]Converting TFileStream to C#
我一直在嘗試將以下Delphi代碼轉換為C#。 我以前從未與Delphi合作。 關於FileStream
我一直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代碼如何工作?
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;
}
我相信此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
類型的別名,整數部分是自1899年12月30日以來的天數,小數部分是24小時中已經過去的小數。 請參閱TDateTime文檔 。 因此,如果需要將其轉換為C#DateTime,則需要手動將其轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.