1. หลักการตัด/รวมกัน
การตัดไฟล์คือการตัดไฟล์เป็นไฟล์ขนาดเล็กหลายไฟล์ วิธีการอ่านวัตถุไฟล์ในรูปแบบของ "สตรีมไฟล์" จากนั้นบันทึกลงในไฟล์ตามขนาดบล็อกที่แน่นอน การรวมกันของไฟล์หมายถึงการรวมไฟล์หลายไฟล์ลงในไฟล์เดียว ตัวอย่างเช่นหลักการนี้ใช้สำหรับเครื่องมือบรรจุภัณฑ์ (ฉลาด) หากคุณคุ้นเคยกับแนวคิดของ "การไหล" มันจะง่ายต่อการใช้งาน 2. ตระหนัก
สร้างโครงการใหม่ใน Delphi จากนั้นเพิ่มสองปุ่มหนึ่งแก้ไขหนึ่ง Opendialog หนึ่งและหนึ่งบันทึกลงในแบบฟอร์มจากนั้นเปลี่ยนคำบรรยายภาพของปุ่ม 1 เป็น "ตัด" และคำบรรยายภาพของปุ่ม 2 เป็น "การรวมกัน" (หมายเหตุ: อื่น ๆ การควบคุมแอตทริบิวต์ที่ละเว้น) คลิกสองครั้งที่ปุ่ม 1 และปุ่ม 2 และเขียนรหัสต่อไปนี้:
// ตัดไฟล์
ขั้นตอน tform1.button1click (ผู้ส่ง: tobject);
วาจา
ฉันต้องการ Fragsize, Realtowrite: จำนวนเต็ม;
// ประกาศวัตถุสตรีมไฟล์สองรายการ
// instream เป็นวัตถุสตรีมไฟล์แหล่งที่มาและ Outstream เป็นวัตถุสตรีมการตัดเอาต์พุต
โปรแกรม, Outstream: tfilestream;
S: String;
เริ่ม
ถ้า opendialog1.execute แล้ว
เริ่ม
savedialog1.title: = 'ป้อนชื่อไฟล์ตัดที่คุณต้องการบันทึก';
ถ้า savedialog1.execute แล้ว
เริ่ม
WantedFragSize: = strtoint (edit1.text);
i: = 0;
// สร้างวัตถุสตรีมไฟล์อินพุตในลักษณะอ่านอย่างเดียว
เครื่องมือ: = tfilestream.create (
Opendialog1.filename, fmopenread);
พยายาม
// หากตำแหน่งตัวชี้ปัจจุบันของสตรีม Instream ไม่ได้อยู่ท้ายให้อ่านข้อมูลและจัดเก็บไว้ในไฟล์ตามขนาดบล็อกที่กำหนด //
ในขณะที่ (stream.position <stream.size) ทำ
เริ่ม
s: = inttoStr (i);
ในขณะที่ความยาว <3 ทำ s: = '0'+s;
S: = '.'+s;
// สร้างส่วนขยายของไฟล์ตัดใช้สามหลักเป็นส่วนขยายเพื่ออำนวยความสะดวกในการรวมกันของไฟล์
// หากขนาดบล็อกที่เหลืออยู่ใน stream มีขนาดเล็กกว่าขนาดบล็อกที่กำหนดให้บันทึกหมายเลขบล็อกที่เหลืออยู่ // ข้อมูลลงในไฟล์
ถ้า instream.size - instream.position <wantedfragsize แล้ว
realtowrite: = instream.size - Instream.position
อื่น
RealTowRite: = WantedFragSize;
// สร้างวัตถุสตรีมไฟล์เอาต์พุต
Outstream: = tfilestream.create (savedialog1.filename+s, fmcreate);
พยายาม
Outstream.copyfrom (Instream, Realtowrite);
inc (i);
ในที่สุด
// ปล่อยวัตถุสตรีมไฟล์เอาต์พุต
Outstream.free;
จบ;
จบ;
ในที่สุด
stream.free;
จบ;
จบ;
จบ;
สิ้นสุด;
ขั้นตอน TFORM1.Button2Click (ผู้ส่ง: TOBJECT);
วาจา
ฉัน: จำนวนเต็ม;
โปรแกรม, Outstream: tfilestream;
SourcePath, Fragname, S: String;
เริ่ม
Opendialog1.title: = 'โปรดเลือกตัดไฟล์';
ถ้า opendialog1.execute แล้ว
เริ่ม
// รับพา ธ ไปยังไฟล์ตัดที่เปิดอยู่ในปัจจุบัน
SourcePath: = ExtractFilePath (Opendialog1.filename);
// รับชื่อไฟล์ของไฟล์ตัดที่เปิดอยู่ในปัจจุบัน
Fragname: = ExtractFilename (Opendialog1.filename);
savedialog1.title: = 'โปรดป้อนชื่อไฟล์ที่คุณต้องการรวม';
ถ้า savedialog1.execute แล้ว
เริ่ม
i: = 0;
s: = inttoStr (i);
ในขณะที่ความยาว <3 ทำ s: = '0'+s;
S: = '.'+s;
FragName: = ChangeFileEXT (FRAGNAME, S);
// หากมีไฟล์ที่มีส่วนขยาย .000 ในไดเรกทอรีให้สร้างสตรีมไฟล์เอาต์พุต // วัตถุ
ถ้า fileexists (sourcepath+fragname) จากนั้น
เริ่ม
Outstream: = tfilestream.create (savedialog1.filename, fmcreate);
พยายาม
// การรวมไฟล์เพิ่มขึ้นกับส่วนขยายไฟล์
ในขณะที่ fileexists (sourcepath+fragname) ทำ
เริ่ม
INSTREAM: = TFILESTREAM.Create (SourcePath+FragName, FMOPENREAD);
พยายาม
// เขียนข้อมูลของสตรีมไฟล์อินพุตไปยังสตรีมไฟล์เอาต์พุต
Outstream.copyfrom (Instream, 0);
inc (i);
s: = inttoStr (i);
ในขณะที่ความยาว <3 ทำ s: = '0'+s;
S: = '.'+s;
FragName: = ChangeFileEXT (FRAGNAME, S);
ในที่สุด
stream.free;
จบ;
จบ;
ในที่สุด
Outstream.free;
จบ;
จบ;
จบ;
จบ;
จบ;
ในบรรดาเครื่องมือประจำวันที่เราใช้มีวัตถุ "สตรีม" มากมายที่เราจะใช้และฟังก์ชั่นของพวกเขาก็สำคัญมากเช่นกัน การจับมันมีประโยชน์มากและสำคัญกว่า