1. 파일 절단/조합 원리
파일 절단은 파일을 여러 개의 작은 파일로 잘라내는 것입니다. 이 방법은 "파일 스트림"형식으로 파일 객체를 읽은 다음 특정 블록 크기에 따라 파일에 저장하는 것입니다. 파일 조합은 여러 파일을 하나의 파일로 결합하는 것을 의미합니다. 예를 들어이 원리는 포장 도구 (WISE)에 사용됩니다. "Flow"라는 개념에 익숙하다면 구현 단계가 쉽습니다. 2. 실현
Delphi에서 새 프로젝트를 만든 다음 두 개의 버튼, 하나의 편집, 하나의 Opendialog 및 하나의 Savedialog를 양식에 추가 한 다음 Button1의 캡션을 "Cut"으로 변경하고 Button2의 캡션을 "조합"으로 변경하십시오 (참고 : 기타. 제어가 생략 된 속성). Button1 및 Button2를 두 번 클릭하고 다음 코드를 작성하십시오.
// 파일을 잘라냅니다
절차 tform1.Button1click (sender : tobject);
var
I, WANTEDFRAGSIZE, RealTOWRITE : Integer;
// 두 파일 스트림 객체를 선언합니다
// instream은 입력 소스 파일 스트림 객체이며 아웃 스트림은 출력 컷 파일 스트림 객체입니다.
악기, 아웃 스트림 : tfilestream;
S : 문자열;
시작하다
opendialog1.Execute 인 경우
시작하다
savedialog1.title : = '저장하려는 절단 파일 이름을 입력하십시오';
Savedialog1.Execute 인 경우
시작하다
WANTEDFRAGSIZE : = strtoint (edit1.text); // 절단 블록 크기를 정의합니다
I : = 0;
// 입력 파일 스트림 객체 생성 읽기 전용 방식으로
Instream : = tfilestream.create (
opendialog1.filename, fmopenread);
노력하다
// Instream 스트림의 현재 포인터 위치가 끝에 있지 않으면 데이터를 읽고 정의 된 블록 크기에 따라 파일에 저장하십시오.
while (instream.position <instream.size)
시작하다
s : = inttostr (i);
길이 (s) <3 do s : = '0'+s;
S : = '.'+s;
// 잘라 내기 파일의 확장자를 생성하고, 파일의 조합을 용이하게하기 위해 3 자리 숫자를 확장자로 사용하십시오.
// Instream의 나머지 블록 크기가 정의 된 블록 크기보다 작 으면 나머지 블록 번호 // 데이터를 파일에 저장합니다.
instream.size -instream.position <wentkfragsize then
RealTowrite : = instream.size -instream.position
또 다른
RealTowrite : = WantmentFragsize;
// 출력 파일 스트림 객체를 만듭니다
아웃 스트림 : = tfilestream.create (savedialog1.filename+s, fmcreate);
노력하다
Outstream.copyfrom (Instream, RealTowrite);
Inc (i);
마지막으로
// 출력 파일 스트림 객체를 릴리스합니다
외부.
끝;
끝;
마지막으로
instream.free;
끝;
끝;
끝;
끝; // 조합 파일
절차 tform1.Button2Click (sender : tobject);
var
I : 정수;
악기, 아웃 스트림 : tfilestream;
sourcepath, fragname, s : 문자열;
시작하다
opendialog1.title : = '파일을 선택하십시오';
opendialog1.Execute 인 경우
시작하다
// 현재 열린 컷 파일로가는 경로를 가져옵니다
sourcepath : = ExtractFilePath (opendialog1.filename);
// 현재 열린 컷 파일의 파일 이름 가져 오기
FragName : = ExtractFilename (opendialog1.filename);
savedialog1.title : = '결합하려는 파일 이름을 입력하십시오';
Savedialog1.Execute 인 경우
시작하다
I : = 0;
s : = inttostr (i);
길이 (s) <3 do s : = '0'+s;
S : = '.'+s;
FragName : = ChangeFileExt (Fragname, s);
// 디렉토리에 확장자 .000이있는 파일이있는 경우 출력 파일 스트림을 만듭니다. // 객체
FileExists (sourcepath+fragname)이면
시작하다
아웃 스트림 : = tfilestream.create (savedialog1.filename, fmcreate);
노력하다
// 파일을 파일 확장자와 증분으로 결합합니다
PileExists (sourcepath+fragname)는 수행합니다
시작하다
instream : = tfilestream.create (sourcepath+fragname, fmopenread);
노력하다
// 입력 파일 스트림의 데이터를 출력 파일 스트림에 쓰기
Outstream.copyfrom (Instream, 0);
Inc (i);
s : = inttostr (i);
길이 (s) <3 do s : = '0'+s;
S : = '.'+s;
FragName : = ChangeFileExt (Fragname, s);
마지막으로
instream.free;
끝;
끝;
마지막으로
외부.
끝;
끝;
끝;
끝;
끝;
우리가 사용하는 많은 일일 도구 중에는 우리가 사용할 수있는 많은 "스트림"객체가 있으며, 예를 들어 파일 암호화, 파일 다운로드 등에는 매우 중요합니다. 파악하는 것은 매우 유용하고 더 중요합니다.