Q&A

  • 원하는 클래스를 화일 데이터로 그리고 다시 클래스읽기..
델파이 초보라서 묻습니다..
지금 TStream, TMemoryStream 등 기타 스트림 함수를 사용하여
화일로 저장하길 원합니다. 그리고 반대로 다시 작성한 클래스로
자료를 저장하는 방법은 없는건가요? 컴포넌트는 되는데 클래스는
어떻게 하는지 아시는 고수분 도와주세요 ^^..
3  COMMENTS
  • Profile
    최용일 2003.10.24 21:57
    안녕하세요. 최용일입니다.

    컴포넌트는 스트리밍을 지원하는 TPersistent에서 상속받았기때문에 기본적으로 스트리밍이 되는거구요...

    일반클래스에 적용하실려면 TObject말고 TPersistent에서 상속받아서 사용하세요...

    ^^ 항상 즐코하세요...

  • Profile
    손희석 2003.10.25 02:30
    대충 무슨 말씀하시는줄은 알겠습니다..

    간단한 예제로 어떻게 스트림으로 클래스를 저장하는지 부탁드립니다 ^^
    그리고 읽어오는 것도 ㅠ.ㅠ
    예)
    type
      TPerson = Class(TPersistent)
      private
        FsFirst : string;
        FsName : string;
      public
        procedure SetName(AsFirstName,AsName : string);
      end;
    ...

    procedure TForm1.Button1Click(Sender: TObject);
    var Person : TPerson;
        FileStream : TFileStream;
    begin
      Person := TPerson.Create;
      Person.SetName('A','B');
      FileStream := TFileStream.Create('c:aa.txt',fmCreate);
      FileStream.WriteComponent(Person); --> 에러납니다.. ㅠ.ㅠ
      Person.Free;
      FileStream.Free;
    end;

    제가 작성한 예제고요.. 고수님 부탁드립니다 ㅠ.ㅠ
  • Profile
    최용일 2003.10.25 20:17
    안녕하세요. 최용일입니다.

    TStream.WriteComponent는 당연히 TComponent를 대상으로 다룹니다. 때문에 안되는거구요... TStream.WriteComponent와 같이 작동하는 것을 만드셔야 합니다.

    TMemo.Lines등과 같이 컴포넌트의 속성으로서 폼파일에 저장되어서 델파이 IDE내의 속성창에 표시하는게 아니라면 TPersistent에서 상속받으실 필요도 없구 걍 스트림에 저장하시면 됩니다.

    var
        Stream: TFileStream;
        Writer: TWriter;
        Person : TPerson;
    begin
        Person := TPerson.Create;
        Person.SetName('A','B');
        Stream := TFileStream.Create('FileName', fmCreate);
        Writer := TWriter.Create(Stream, 1024);
        Writer.WriteString(Persion.fsFirst);
        Writer.WriteString(Persion.fsName);
        Writer.Free;
        Stream.Free;
        Person.Free;
    end;

    ^^ 항상 즐코하세요...