簡體   English   中英

將TFileStream轉換為C#

[英]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.TDateTimeDouble類型的別名,整數部分是自1899年12月30日以來的天數,小數部分是24小時中已經過去的小數。 請參閱TDateTime文檔 因此,如果需要將其轉換為C#DateTime,則需要手動將其轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM