📄 u_form1.pas
字号:
unit U_Form1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Spin,FileCtrl, ComCtrls, Buttons, ImgList;
type
TForm1 = class(TForm)
OpenDlg1: TOpenDialog;
OpenDlg2: TOpenDialog;
SaveDlg: TSaveDialog;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
LargeFileEdit: TEdit;
DirEdit: TEdit;
UnitSpinEdit: TSpinEdit;
FileSpeedButton: TSpeedButton;
DirSpeedButton: TSpeedButton;
Label5: TLabel;
SmallFileEdit: TEdit;
ChoiceButton: TButton;
RestoreButton: TButton;
ListBox1: TListBox;
DivideButton: TButton;
Label4: TLabel;
Label6: TLabel;
ProgressBar1: TProgressBar;
ProgressBar2: TProgressBar;
ExitButton: TButton;
procedure DivideButtonClick(Sender: TObject);
procedure ChoiceButtonClick(Sender: TObject);
procedure RestoreButtonClick(Sender: TObject);
procedure FileSpeedButtonClick(Sender: TObject);
procedure DirSpeedButtonClick(Sender: TObject);
procedure ExitButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DivideButtonClick(Sender: TObject);
var
I, K, Rest, Len: Integer;
AF, BF: TFileStream; //文件流对象
Fn: string; //文件名
Buf : Integer; //单碟容量
begin
if (LargeFileEdit.Text = '') or (DirEdit.Text = '')or(SmallFileEdit.Text = '') then
begin
Beep;
Exit;
end;
//单蝶容量计算为字节数
buf := UnitSpinEdit.Value * 1024;
I := 1;
Try
Af := TFileStream.Create(LargeFileEdit.Text, fmOpenRead);
K := Af.Size div Buf;
Rest := Af.Size - K * Buf;
For I := 1 to K do
begin
Fn := DirEdit.Text +SmallFileEdit.Text +IntToStr(I) + '.spt'; //文件名
Bf := TFileStream.Create(Fn, fmCreate);
Bf.CopyFrom(Af, Buf);
Bf.Free;
ProgressBar1.Position:=100*(I-1) DIV K ;
end;
if Rest > 0 then
begin
Fn := DirEdit.Text + IntToStr(I) + '.spt';
Bf := TFileStream.Create(Fn, fmCreate);
Bf.CopyFrom(Af, Rest);
Bf.Free;
ProgressBar1.Position:=100;
end;
Showmessage('文件被成功地分割成'+IntToStr(K+1)+'个切片文件!');
finally
AF.Free;
end;
end;
procedure TForm1.ChoiceButtonClick(Sender: TObject);
var
I : Integer;
begin
if OpenDlg2.Execute then
For I := 0 to OpenDlg2.Files.Count - 1 do
ListBox1.Items.Add(OpenDlg2.files[I]);
end;
procedure TForm1.RestoreButtonClick(Sender: TObject);
var
Af, Bf: TFileStream; //文件流对象
Fn, Ft: string; //文件名
I,Count : Integer;
begin
Count:=ListBox1.Items.Count;
if Count = 0 then
begin
Beep;
Exit;
end;
if SaveDlg.Execute then
begin
Fn := SaveDlg.FileName;
try
Af := TFileStream.Create(Fn, fmCreate);
For I := 0 to Count -1 do
begin
Ft := ListBox1.Items[I];
Bf := TFileStream.Create(Ft, fmOpenRead);
Af.CopyFrom(Bf, Bf.Size);
Bf.Free;
ProgressBar2.Position:=100*I div Count ;
end;
Showmessage('文件被成功地合并为 '+Fn+ ' 文件!');
finally
Af.Free;
end;
end;
end;
procedure TForm1.FileSpeedButtonClick(Sender: TObject);
begin
if OpenDlg1.Execute then
LargeFileEdit.Text := OpenDlg1.FileName; //设置分割后的切片文件的存储位置
end;
procedure TForm1.DirSpeedButtonClick(Sender: TObject);
var
Dir: string;
begin
//SelectDirectory函数声明在FileCtrl单元中
if SelectDirectory('选择存储目录:', '', Dir) then
DirEdit.Text := Dir + '\';
end;
procedure TForm1.ExitButtonClick(Sender: TObject);
begin
Application.Terminate;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -