Как перенести эту функцию соединения файлов с Delphi на Ruby - PullRequest
0 голосов
/ 14 апреля 2011

Я получил эту функцию Delphi для объединения файлов:

procedure Join(Main_FileName, Hidden_Filename : string);
var
  MainFile    : TFileStream;
  HiddenFile  : TFileStream;
  SizeOfFile  : Cardinal;
  SearchWord  : string[10];
begin
  MainFile       := TFileStream.Create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
  try
    SizeOfFile     := MainFile.Size;
    HiddenFile     := TFileStream.Create(Hidden_Filename, fmOpenRead or fmShareDenyNone);
    try
      MainFile.Seek(0, soFromEnd);
      MainFile.CopyFrom(HiddenFile, 0);
      MainFile.Seek(0, soFromEnd);
    finally
     HiddenFile.Free;
    end;
    SearchWord := IntToStr(SizeOfFile) + #0;
    MainFile.Seek(0, soFromEnd);
    MainFile.WriteBuffer(SearchWord, SizeOf(SearchWord));
  finally
   MainFile.Free;
  end;
end;

И нужно перенести это в ruby. Созданный файл должен быть совместим с этой функцией разделения Delphi: (Существует только в delphi, порт ruby ​​не нужен)

procedure Split(Main_FileName, NewFromMain_Filename : string);
var
  MainFile  : TFileStream;
  SplitFile : TFileStream;
  HelpStr   : string[10];
  GetSize   : integer;
begin
  MainFile    := TFileStream.create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
  try
    SplitFile := TFileStream.Create(NewFromMain_Filename, fmCreate or fmShareDenyNone);
    try
      MainFile.Position   := MainFile.Size - 11;
      MainFile.Read(HelpStr, 10);
      GetSize := StrToInt(HelpStr);
      MainFile.Position := GetSize;
      SplitFile.CopyFrom(MainFile, MainFile.Size-GetSize);
      SplitFile.Size := SplitFile.Size - 11;
      MainFile.Size :=  GetSize;
    finally
     SplitFile.Free;
    end;
  finally
   MainFile.Free;
  end;
end;

Источник функций delphi отсюда: http://www.delphi -treff.de / Tipps / dateienverzeichnisse / dateioperationen / Dateien-Miteinander-verschmelzen /

1 Ответ

0 голосов
/ 15 апреля 2011

Вот способ Ruby - короткий, читаемый и простой:

size = File.size("mainfile")
File.open("mainfile", "ab") {|mf|
  File.open("hiddenfile", "rb") { |hf|
     mf.write(hf.read)
     mf.write("#{size}\x0".ljust(10))
  }
}

не проверял, работает ли сплит, нет delphi

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...