将TFileStream转换为C#

时间:2016-03-02 18:16:55

标签: c# delphi filestream

我一直在尝试将以下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;
        }

1 个答案:

答案 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.TDateTimeDouble类型的别名,其中整数部分是自18/30/18/99以来的天数,小数部分是已经过去的24小时日的一小部分。见TDateTime documentation。因此,如果您需要将其转换为C#DateTime,则需要手动转换它。