⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssmainfrm.pas

📁 文件同步
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      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]);
            // 先删除目标目录中的旧文件
            FCurrMsg := '正在处理: ' + FSrcDir;
            FindFile(FDstDir, '*.*', FileDelProc, DirDelProc,
              ListView.Items[i].SubItems[2] <> '', True);
            // 再复制源目录中的新文件
            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 +
    '该软件用于同步多个目录中的文件。同步后的目标文件夹'#13#10 +
    '将与源文件夹内容完全一致。同步更新时自动复制源文件'#13#10 +
    '夹中大小或日期变更过的文件,并删除目标文件夹中不存'#13#10 +
    '在于源文件夹的文件和目录。'#13#10#13#10 +
    '版权所有 (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 := '正在复制: ' + FileName;
    SetFileAttributes(PChar(DstName), FILE_ATTRIBUTE_NORMAL);  // 去掉只读属性
    DeleteFile(DstName); // 先删除文件再复制以避免属性和日期不同
    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('同步盘符');// 节点删除
  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.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -