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