2010-08-16 4 views

ответ

15

Лучший способ, вероятно, позвонить CONVERT.EXE, приложение командной строки, включенное в состав Delphi. Here's an example in Delphi. Вы можете сделать то же самое в C#.

+0

Совет. Свяжите тип файла * .DFM с CONVERT.EXE. Таким образом, вы можете выбрать несколько DFM-файлов в проводнике и выбрать «Open with Convert» в контекстном меню. –

3

Я использую эти четыре метода, чтобы проверить формат файла DFM и преобразовать следующим образом: двоичный файл DFM

function IsDFMStreamBinary(AStream: TMemoryStream): Boolean; 
{ Returns true if dfm file is in a binary format } 
var 
    F: TMemoryStream; 
    B: byte; 
begin 
    B := 0; 
    F := TMemoryStream.Create; 
    F.LoadFromStream(AStream); 
    try 
    F.read(B, 1); 
    Result := B = $FF; 
    finally 
    F.Free; 
    end; 
end; 

function DfmFile2Stream(const ASrc: string; ADest: TStream): Boolean; 
{ Save dfm to stream } 
var 
    SrcS: TFileStream; 
begin 
    SrcS := TFileStream.Create(ASrc, fmOpenRead or fmShareDenyWrite); 
    try 
    ObjectResourceToText(SrcS, ADest); 
    Result := True; 
    finally 
    SrcS.Free; 
    end; 
end; 

procedure Txt2DFM(ASrc, ADest: string); 
{ Convert Text to DFM } 
var 
    SrcS, DestS: TFileStream; 
begin 
    SrcS := TFileStream.Create(ASrc, fmOpenRead); 
    DestS := TFileStream.Create(ADest, fmCreate); 
    try 
    ObjectTextToResource(SrcS, DestS); 
    finally 
    SrcS.Free; 
    DestS.Free; 
    end; 
end; 

function Dfm2Txt(const ASrc, ADest: string): boolean; 
{ Convert a binary DFM to text } 
var 
    ASrcS, ADestS: TFileStream; 
begin 
    ASrcS := TFileStream.Create(ASrc, fmOpenRead); 
    ADestS := TFileStream.Create(ADest, fmCreate); 
    try 
    ObjectResourceToText(ASrcS, ADestS); 
    Result := True; 
    finally 
    ASrcS.Free; 
    ADestS.Free; 
    end; 
end; 
+0

Я проголосовал бы за это, если бы вы не проигнорировали часть вопроса «от C#». –

+0

Спасибо, но мне нужен код C# не Delphi – Lennie

-1

А Делфи после всего двоичном представлении объекта.

Правильный способ выполнения задания - написать эгоистичную утилиту командной строки C# (больше не нужно никакой внешней зависимости), основываясь на знании формата самого двоичного файла DFM.

Если формат не раскрывается, делая обращенную инженерию должно быть выполнимо:

  • ObjectResourceToText исходный код доступен (classes.pas).
  • Конвертеры (из двоичного текста в текст и наоборот) для генерации ввода, требуемого от инструментов, также доступны.
+0

Вопрос более чем адекватно ответил за год до вашего комментария, что он добавляет? – RichardTheKiwi

Смежные вопросы