파일 분할/ 결합하는 프로그램의 소스가 없어서 직접만들어 보고싶어서 시작했습니다. 어디서 부터 잘못되었는지 알고싶습니다...
제가 파일분할 / 결합하는 프로그램을 만들어 보고 싶어서 시작을하긴했는데..
점점 막막한 길로 접어들고 있습니다. 도움을 주시면 감사하겠습니다.
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;
오류가 나는 이유와 방법이 있다면 답변을 부탁드립니다.그럼 수고하십시오..^^;;
			 
	
	
    
    
	
	
    
    
    
그런데, 복사할 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);
이런식으로 말이죠.