Q&A

  • 파일스트림에 대해 질문있습니다. ^^
파일 분할/ 결합하는 프로그램의 소스가 없어서 직접만들어 보고싶어서 시작했습니다. 어디서 부터 잘못되었는지 알고싶습니다...

제가 파일분할 / 결합하는 프로그램을 만들어 보고 싶어서 시작을하긴했는데..
점점 막막한 길로 접어들고 있습니다. 도움을 주시면 감사하겠습니다.

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
MS : TMemoryStream;
FS,RS,RS2 :Tfilestream;
begin
   MS := TMemoryStream.Create;
   FS := Tfilestream.Create('C:My Documentsbtres.zip', fmOpenRead);
   RS := Tfilestream.Create('C:My Documentsbtres2.zip',  fmCreate);
   RS2 :=Tfilestream.Create('C:My Documentsbtres1.zip',  fmCreate);
   label1.caption:=inttostr(fs.Size);
   MS.CopyFrom(FS, round(fs.Size/3*2));
   RS2.CopyFrom(MS, 0);
   label2.caption:=inttostr(Fs.position);
   ms.Clear;
   Fs.Position := round(fs.Size/3*2);
   i:= FS.size-Fs.Position;
   MS.CopyFrom(FS, i);
   RS.CopyFrom(MS, 0);
   FS.Free;
   RS.Free;
   RS2.Free;
   MS.Free;

end;
이렇게 하면 res.zip 파일이 res1.zip 과 res2.zip으로 나뉘어 집니다.
파일 크기는 구분하기 위해 2/3 과 1/3으로 나누었습니다.
이렇게 나누는 건 성공을 하긴했는데..
합치는것이 오류메세지가 계속 뜨는군요.. 도움을 주시면 감사하겠습니다.
아래는 오류가 나는 코드입니다.

procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
MS,ms2 : TMemoryStream;
FS,RS,RS2 :Tfilestream;
begin
   MS := TMemoryStream.Create;
   RS := Tfilestream.Create('C:My Documentsbtres2.zip',  fmOpenRead);
   RS2 :=Tfilestream.Create('C:My Documentsbtres1.zip',  fmOpenRead);
   FS := Tfilestream.Create('C:My Documentsbtres3.zip', fmCreate);
   label1.caption:=inttostr(RS2.Size);
   MS.CopyFrom(RS2, 0);
   FS.CopyFrom(MS, 0);
   MS.CopyFrom(RS, Rs2.size+1);  <==여기서 에러가 나더군요..

   FS.CopyFrom(MS,0);
   RS.Free;
   RS2.Free;
   FS.Free;
   MS.Free;
end;

오류가 나는 이유와 방법이 있다면 답변을 부탁드립니다.그럼 수고하십시오..^^;;
1  COMMENTS
  • Profile
    한원희 2002.07.15 09:43
    에러가 나는 이유는 소스상 RS2가 RS 보다 크기가 더 크죠..
    그런데, 복사할 Count에 RS 스트림이 갖고 있는 양보다 더 큰 크기(RS2.Size+1)를 넣어서 읽기 에러가 난 것입니다.
    RS를 복사할 차례이니까, RS.Size 로 하시던가, 아니면 0을 넣으면 될겁니다.
    하지만, 더 간단하게... 메모리 스트림을 사용하지 마시고, 바로 파일 스트림끼리 복사하도록 하는 것도 좋을 것 같습니다.

       FS.CopyFrom(RS2, 0);
       FS.CopyFrom(RS, 0);

    이렇게 말이죠..
    그리고, 자를 때도 그냥, 자르고 싶은 양만큼만 계산해서 복사할 스트림으로 바로 CopyFrom 메소드를 이용해서 복사하면 될것 같군요.

      RS.CopyFrom(Fs, Size1);
      RS2.CopyFrom(FS, Size2);

    이런식으로 말이죠.




    • 한원희
      2002.07.15 21:17
    • 최용일
      2002.07.16 01:02
    • ㄴ ㅏ ㅁ ㅑ
      2002.07.16 02:31
    • 최용일
      2002.07.16 02:39
    • ㄴ ㅏ ㅁ ㅑ
      2002.07.16 02:57
    • ㄴ ㅏ ㅁ ㅑ
      2002.07.15 23:14
    • 한원희
      2002.07.15 23:24
    • • • •
    • 이진원
    • 2002.07.15 20:22
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 전철호
      2002.07.15 22:43
      FTP 서버 프로그램에서는 하나의 IP에서 똑같은 포트로 두개의 서버를 구동할 수 없습니다. 하지만 FT...
    • 이진원
      2002.07.15 23:02
      하나의 서버이고 두개의 서버에 등록된 계정으로 서버에 접속합니다. 클라이언트에서 서버로 접속할 ...
    • 최석기
      2002.07.15 20:20
      폰트 설정 문제 때문에 그런거 같네요. 폰트중에 뒤에 체라고 붙는 놈들은 한 글자의 너비가 동일한 글...
    • Ha Young
    • 2002.07.15 20:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.15 21:11
      ^Boolean은 Boolean형 포인터를 선언하는 겁니다. bp에 어떤 값을 대입하기 위해서는 포인터 이기 때문에 ...
    • 델파이사랑
      2002.07.16 17:54
      좋은 답변 감사합니다. (냉무)
    • 짱아
    • 2002.07.15 19:53
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 머슴
      2002.07.16 19:14
      그 TXT 파일을 bTABLE에 INSERT하기위한 프로그램 소스를 구할수 없을까염... TXT파일을 DB에 꽂는 프로그...
    • 머슴
      2002.07.16 18:46
        왜 두줄이 생기냐면요...     for i:=0 to qryData.FieldCount - 1 do...
    • 이정택
    • 2002.07.15 19:35
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.07.16 01:07
      안녕하세요. 최용일입니다. 왜 Active를 False로 하실려는지 이유를 잘 모르겠네요. 소켓프로그램밍...
    • 이정택
      2002.07.16 01:32
      제가 그렇게 하려고 하는 이유는 만약 Active를 True로 하여 준비를 해야한다 면 항상 서버쪽의 프로그램...
    • 최용일
      2002.07.16 03:11
      무슨 말씀을 하시는지 질문의 요지를 정확히 모르겠네요... 클라이언트와 서버가 통신을 하려면 두개의 ...
    • 권민경
    • 2002.07.13 03:52
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.15 20:11
      Create(Self)는 생성한 객체의 소유자가 현 객체(Self)로 설정하여, 현 객체가 해제(Free)되면, 핸객...
    • 델파이사랑
      2002.07.16 17:56
      좋은 답변 감사합니다. ....(냉무)
    • 김병훈
    • 2002.07.15 13:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.15 20:13
      메인 폼의 OnActivate 이벤트에서 작업을 해주시면 될겁니다. ^^
    • 김병훈
      2002.07.16 06:47
      또 뵈었네요..^^; 네.. 그러면 계속 폼이 활성화될때 마다 뜨려고 합니다. ^^; 가령 다른 작업하다 ...
    • 한원희
      2002.07.15 12:24
      일반적으로 그렇게 동작하지 않는데... 저도 MDI 프로젝트를 간단하게 하나 만들어서 메인하고, 차일...
    • 김병훈
      2002.07.15 13:13
      어 이상하다...^^; (답글이 얼마나 반가운지..아시죠? ^^;) 저도 다시 해봤는데... 제가 해본 순서를 적...
    • 한원희
      2002.07.15 20:16
      저는 아무리 그렇게 해봐도 제대로 동작하던데... 음... 이상하군요..???
    • 정문일
    • 2002.07.15 08:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.15 09:43
      에러가 나는 이유는 소스상 RS2가 RS 보다 크기가 더 크죠.. 그런데, 복사할 Count에 RS 스트림이 갖고 있...
    • 김성훈
    • 2002.07.15 00:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 전형식
      2002.07.15 07:02
      mysql 를 한번 써보시지요. 저는 모두 이걸루 바꿨습니다. ^^ 나중에 다른 DB로 포워딩도 쉽고요... 관...
    • 신복호
    • 2002.07.14 11:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 전형식
      2002.07.14 12:11
      안녕하세요 아래의 메시지는 중복불가(Unick)한 키값이 중복될경우 발생하는 에러인듯 싶습니다.. 마스...
    • 신복호
      2002.07.23 22:19
      답변해 주셔서 감사합니다. 그런데 버튼을 Append를 할 때는 오류가 나는데, Insert를 쓸 때는 오류가 ...
    • 김성래
    • 2002.07.14 10:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김용덕
      2002.07.15 23:12
      안녕하세요. IPHLPAPI는 Jedi쪽에서 Pascal로 convert해놨습니다. http://www.delphi-jedi.org/Jedi:...
    • jslove
    • 2002.07.14 03:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 전형식
      2002.07.14 11:57
      안녕하세요. 전송시 레코드에 넣어서 보내시는군요 받으실때도 받은 데이타를 같은 포멧의 레코드에 넣어...
    • 신희석
    • 2002.07.14 01:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박준열
      2002.07.14 03:22
      ==> 님의 고충을 대략 알겠슴니다. 물론 저도 X.25관련 APP를 해본적은 없슴니다. 책자 : UNIX Networ...
    • 한원희
      2002.07.14 02:10
      저도 자세히는 모르지만, 어짜피 X.25 는 TCP/IP 하부에서 동작하는 프로토콜이기 때문에, 실제로 애플리...
    • oss
    • 2002.07.13 21:52
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 전형식
      2002.07.14 12:02
      컴포넌트 등록시 필요한 파일은 다 보유하신듯 싶네요. 컴포넌트가 등록후 빠렛에 나타나려면 내부에 몇가...
    • KDDG_ZZOM
      2002.07.13 23:14
      해결하셨을지도 모르겠지만... 우선 pas파일만 있어도 되는걸로 알고 있습니다... 인스톨 콤포넌트에서 ...
    • 오정민
      2002.07.13 23:08
      install component 에서 unint filename 에서 해당pas 를 열면 됩니다. 그리고나서 ok를 클릭하면 왠만한...
    • 장명선
      2002.07.13 22:27
      install component 라는 곳이 있습니다 그곳에서 설치하시면 됩니다.
    • oss
      2002.07.13 23:00
      그건 저두 알고 있어요~ 그렇게 해서 안되니까 글을 올렸죠~ 좀 더 자세한 설명 부탁드립니다~ ...