?? ssmainfrm.~pas
字號:
begin
for h:=0 to ListView3.Items.Count -1 do
begin
if ListView3.Items[h].SubItems[0]<>'' then
begin
if (ListView.Items[i].SubItems[3] <> ListView.Items[i].SubItems[4] ) and (ListView.Items[i].SubItems[3] <>'') then
begin
FSrcDir := MakePath(ListView.Items[i].SubItems[0]);
FDstDir := MakePath(ListView3.Items[h].SubItems[0]+':'+ListView.Items[i].SubItems[1]);
// 先刪除目標(biāo)目錄中的舊文件
FCurrMsg := '正在處理: ' + FSrcDir;
FindFile(FDstDir, '*.*', FileDelProc, DirDelProc,
ListView.Items[i].SubItems[2] <> '', True);
// 再復(fù)制源目錄中的新文件
FindFile(FSrcDir, '*.*', FileSyncProc, nil,
ListView.Items[i].SubItems[2] <> '', True);
end;
end
end;
if FAbort then Exit;
ListView.Items[i].SubItems[4]:=ListView.Items[i].SubItems[3];
end;
tmr1Timer(nil);
finally
tmr1.Enabled := False;
ControlSetEnabled(True);
FExecuting := False;
btnExecute.Caption := '同步(&I)';
if not FAbort then Memo1.Lines.Add('['+FormatDateTime('hh:mm:ss',now)+'] '+Format('游戲同步完成,共更新文件 %d 個,刪除舊文件(夾) %d 個!',[FCopyCnt, FDelCnt]));
//InfoDlg(Format('游戲同步完成,共更新文件 %d 個,刪除舊文件(夾) %d 個!',[FCopyCnt, FDelCnt]));
end;
end;
end;
procedure TSSMainForm.btnAboutClick(Sender: TObject);
begin
InfoDlg(Caption + #13#10#13#10 +
'該軟件用于同步多個目錄中的文件。同步后的目標(biāo)文件夾'#13#10 +
'將與源文件夾內(nèi)容完全一致。同步更新時自動復(fù)制源文件'#13#10 +
'夾中大小或日期變更過的文件,并刪除目標(biāo)文件夾中不存'#13#10 +
'在于源文件夾的文件和目錄。'#13#10#13#10 +
'版權(quán)所有 (C)2001-2008');
end;
procedure TSSMainForm.btnExitClick(Sender: TObject);
begin
Close;
end;
procedure TSSMainForm.tmr1Timer(Sender: TObject);
var
t1, t2: TDateTime;
begin
pb1.Position := FProcCnt;
StatusBar.SimpleText := FCurrMsg;
t1 := (GetTickCount - FStartTick) / 1000 / 3600 / 24;
if (FProcTick <> 0) and (FProcCnt > 0) then
t2 := ((GetTickCount - FProcTick) / 1000 / 3600 / 24) * (1 - FFileCnt / FProcCnt)
else
t2 := 0;
lbl4.Caption := Format('已用 %s 剩余 %s', [TimeToStr(t1), TimeToStr(t2)]);
end;
procedure TSSMainForm.FileCntProc(const FileName: string;
const Info: TSearchRec; var Abort: Boolean);
begin
Inc(FFileCnt);
Abort := FAbort;
end;
procedure TSSMainForm.FileSyncProc(const FileName: string;
const Info: TSearchRec; var Abort: Boolean);
var
DstName: string;
begin
if FAbort then
begin
Abort := True;
Exit;
end;
Sleep(1);
DstName := FDstDir + Copy(FileName, Length(FSrcDir) + 1, MaxInt);
if not FileExists(DstName) or (GetFileSize(FileName) <> GetFileSize(DstName))
or (GetFileDateTime(FileName) <> GetFileDateTime(DstName)) then
begin
ForceDirectories(ExtractFileDir(DstName));
FCurrMsg := '正在復(fù)制: ' + FileName;
SetFileAttributes(PChar(DstName), FILE_ATTRIBUTE_NORMAL); // 去掉只讀屬性
DeleteFile(DstName); // 先刪除文件再復(fù)制以避免屬性和日期不同
CopyFile(PChar(FileName), PChar(DstName), False);
Inc(FCopyCnt);
end;
Inc(FProcCnt);
end;
procedure TSSMainForm.DirDelProc(const SubDir: string);
begin
if not DirectoryExists(FSrcDir + SubDir) then
begin
FCurrMsg := '正在刪除: ' + FDstDir + SubDir;
Deltree(FDstDir + SubDir);
Inc(FDelCnt);
end;
end;
procedure TSSMainForm.FileDelProc(const FileName: string;
const Info: TSearchRec; var Abort: Boolean);
var
SrcName: string;
begin
if FAbort then
begin
Abort := True;
Exit;
end;
SrcName := FSrcDir + Copy(FileName, Length(FDstDir) + 1, MaxInt);
if not FileExists(SrcName) then
begin
FCurrMsg := '正在刪除: ' + FileName;
SetFileAttributes(PChar(FileName), FILE_ATTRIBUTE_NORMAL);
DeleteFile(FileName);
Inc(FDelCnt);
end;
end;
procedure TSSMainForm.Button1Click(Sender: TObject);
var
i:Integer;
begin
for i := 0 to ListView.Items.Count - 1 do
begin
if ListView.Items[i].Selected then ListView.Items[i].SubItems[4] :='' ;
end;
end;
procedure TSSMainForm.FormShow(Sender: TObject);
var
ini : TIniFile;
FappPath: string;
FiniPath,hc,KS,JS : string;
i:Integer ;
item:TListItem;
Gx:TStrings;
begin
Gx:=Tstringlist.Create;
Acon.ConnectionString:=
'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+
'Data Source='+Edit1.Text+';'+
'Mode=ReadWrite;Extended Properties="";Persist Security Info=False;'+
'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";'+
'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;'+
'Jet OLEDB:Database Locking Mode=1;'+
'Jet OLEDB:Global Partial Bulk Ops=2;'+
'Jet OLEDB:Global Bulk Transactions=1;'+
'Jet OLEDB:New Database Password="";'+
'Jet OLEDB:Create System Database=False;'+
'Jet OLEDB:Encrypt Database=False;'+
'Jet OLEDB:Don''t Copy Locale on Compact=False;'+
'Jet OLEDB:Compact Without Replica Repair=False;'+
'Jet OLEDB:SFP=False';
FappPath := ExtractFilePath(ParamStr(0));
FiniPath := FappPath + '\setup.ini';
ini := TIniFile.Create(FiniPath);
listView3.Clear;
ini.readsection('同步盤符',Gx);
for i:=0 to Gx.Count-1 do
begin
hc:=ini.ReadString('同步盤符',IntToStr(i),'');
if Pos(',',hc)>0 then
begin
try
KS:=Copy(hc,1,Pos(',',hc)-1);
system.Delete(HC,1,Pos(',',HC));
JS:=hc;
Item:=listview3.Items.Add;
Item.Caption:=KS;
Item.SubItems.Add(JS);
except
end;
end;
end;
Gx.Free;
end;
procedure TSSMainForm.Button3Click(Sender: TObject);
var
n,tgadd,i:Integer;
lenc:string;
label abcd;
begin
try
AdoQry.Close;
AdoQry.SQL.Clear;
AdoQry.SQL.Add('SELECT * FROM Package order by LocalPath');
AdoQry.Open;
with AdoQry do
begin
first;
while not eof do
begin
if (AdoQry.FieldByName('IdcUpdateDate').AsString=AdoQry.FieldByName('LocalUpdateDate').AsString) and (AdoQry.FieldByName('LocalPath').AsString<>'') then
begin
tgadd:=0;
lenc:=AdoQry.FieldByName('LocalPath').AsString;
for i:=0 to listview.Items.Count -1 do
begin
if (ListView.Items[i].SubItems[0]=AdoQry.FieldByName('LocalPath').AsString) then
begin
ListView.Items[i].SubItems[1]:=Copy(lenc,3,Length(lenc));
ListView.Items[i].SubItems[3]:=AdoQry.FieldByName('LocalUpdateDate').AsString;
tgadd:=10;
break;
end;
end;
if tgadd=10 then goto abcd;
n:=ListView.Items.Count+1;
with ListView.Items.Add do
begin
Caption := IntToStr(n);
SubItems.Add(AdoQry.FieldByName('LocalPath').AsString);
SubItems.Add(Copy(lenc,3,Length(lenc)));
SubItems.Add('包含');
SubItems.Add(AdoQry.FieldByName('LocalUpdateDate').AsString);
SubItems.Add('');
end;
abcd:
end;
Next;
end;
end;
finally
AdoQry.Close;
end;
end;
procedure TSSMainForm.Button2Click(Sender: TObject);
begin
form1.ShowModal;
end;
procedure TSSMainForm.Button4Click(Sender: TObject);
begin
if ListView3.SelCount=1 then
begin
ListView3.Selected.Delete;
end
end;
procedure TSSMainForm.Button5Click(Sender: TObject);
var
ini:TIniFile;
FappPath: string;
FiniPath: string;
i:Integer;
begin
FappPath := ExtractFilePath(ParamStr(0));
FiniPath := FappPath + '\setup.ini';
ini := TIniFile.Create(FiniPath);
ini.EraseSection('同步盤符');// 節(jié)點刪除
for i:=0 to ListView3.Items.Count -1 do
begin
ini.writestring('同步盤符',inttostr(i),ListView3.Items[i].Caption+','+ListView3.Items[i].SubItems[0]);
end;
ini.Free;
end;
procedure TSSMainForm.Timer1Timer(Sender: TObject);
begin
if btnExecute.Caption = '同步(&I)' then
begin
Button3.Click;
btnExecute.Click;
end;
end;
procedure TSSMainForm.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked=true then Timer1.Enabled:=True else Timer1.Enabled:=False;
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -