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

📄 foldersizethreadunit.pas

📁 软件可自动完成SQL Server数据库和文档的数据定时自动备份
💻 PAS
字号:
unit FolderSizeThreadUnit;

interface

uses
  Classes, Windows, SysUtils;

type
  TFolderSizeThread = class(TThread)
  private
    { Private declarations }
     sFolderName:String;
     timeAfter:TDateTime;
     dirSizeTotal:real;
     dirSizeTotalAll:real;
     dirNumber:integer;
     fileNumber:integer;
     fileNumberTrue: integer;
     procedure GetFolserSizeDone(sDirName:String;sTime:TDateTime; var SizeTotalTrue,SizeTotal:real; var fileSumTrue, fileSum, folderSum:integer);
     procedure GetFolserSize;
  protected
    procedure Execute; override;
  public
    constructor Create(_sFolderName:String; _timeAfter:TDateTime);
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TFolderSizeThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TFolderSizeThread }
uses
  FileTestUnit, TestFunctionUnit;

constructor TFolderSizeThread.Create(_sFolderName:String; _timeAfter:TDateTime);
begin
  sFolderName:=_sFolderName;
  timeAfter:=_timeAfter;
  dirSizeTotal:=0;
  dirSizeTotalAll:=0;
  dirNumber:=0;
  fileNumber:=0;
  fileNumberTrue:=0;
  inherited Create(True);
end;

procedure TFolderSizeThread.GetFolserSizeDone(sDirName:String;sTime:TDateTime; var SizeTotalTrue,SizeTotal:real; var fileSumTrue, fileSum, folderSum:integer);
var
  hFindfile:Cardinal;
  tfile:String;
  sCurDir:String[255];
  FindFileData:WIN32_FIND_DATA;
  getstr:String;
begin
  //先保存当前目录
  sCurDir:=GetCurrentDir;
  ChDir(sDirName);
  hFindfile:=FindFirstFile('*.*',FindFileData);
  if hFindFile<>INVALID_HANDLE_VALUE then
    begin
      repeat
          tfile:=FindFileData.cFileName;
          if (tfile='.') or (tfile='..') then
            Continue;
          //if (FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY) or (FindFileData.dwFileAttributes=48) then
          if FindFileData.dwFileAttributes and faDirectory = faDirectory then
            begin
              folderSum:=folderSum+1;
              FileTestForm.ListBox1.Items.Add(tfile+'-->'+IntToStr(FindFileData.dwFileAttributes));
              if sDirName[Length(sDirName)]<>'\' then
                GetFolserSizeDone(sDirName+'\'+tfile,sTime,SizeTotalTrue,SizeTotal,fileSumTrue, fileSum, folderSum)
              else
                GetFolserSizeDone(sDirName+tfile,sTime,SizeTotalTrue,SizeTotal,fileSumTrue, fileSum, folderSum);
            end
          else
            begin
              if GetFileLastModifyTime(sDirName+'\'+tfile)>timeAfter then
                begin
                  fileSumTrue:=fileSumTrue+1;
                  fileSum:=fileSum+1;
                  dirSizeTotal:=dirSizeTotal+GetFileSize(sDirName+'\'+tfile);
                  dirSizeTotalAll:= dirSizeTotalAll+ GetFileSize(sDirName+'\'+tfile);
                  getStr:=intToStr(FindFileData.dwFileAttributes)+','+DateTimeToStr(now)+','+tfile+' 的大小为:'+FormatFloat('#,##0.00',GetFileSize(sDirName+'\'+tfile))+'KB';
                  FileTestForm.ListBox1.Items.Add(getStr);
                end
              else
                begin
                  fileSum:=fileSum+1;
                  dirSizeTotalAll:= dirSizeTotalAll+ GetFileSize(sDirName+'\'+tfile);
                  getStr:=intToStr(FindFileData.dwFileAttributes)+','+'***'+DateTimeToStr(now)+','+tfile+' 的大小为:'+FormatFloat('#,##0.00',GetFileSize(sDirName+'\'+tfile))+'KB';
                  FileTestForm.ListBox1.Items.Add(getStr);
                end
            end;
      until FindNextFile(hFindFile,FindFileData)=false;
      Windows.FindClose(hFindFile);
    end
  else
    begin
      ChDir(sCurDir);
      //FileTestForm.ListBox1.Items.Add('error');
      exit;
    end;
  //回到原来的目录下
  ChDir(sCurDir);
end;

procedure TFolderSizeThread.GetFolserSize;
begin
      GetFolserSizeDone(sFolderName,timeAfter,dirSizeTotal,dirSizeTotalAll,fileNumberTrue,fileNumber,DirNumber);
      FileTestForm.ListBox1.Items.Add('==========共有文件夹:'+IntToStr(DirNumber)+'个');
      FileTestForm.ListBox1.Items.Add('==========符合条件的文件共有:'+IntToStr(fileNumberTrue)+'个');
      FileTestForm.ListBox1.Items.Add('==========符合条件的文件总大小为:'+FormatFloat('#,##0.00',dirSizeTotal)+'KB');
      FileTestForm.ListBox1.Items.Add('==========共有文件:'+IntToStr(fileNumber)+'个');
      FileTestForm.ListBox1.Items.Add('==========实际总大小为:'+FormatFloat('#,##0.00',dirSizeTotalAll)+'KB');
end;

procedure TFolderSizeThread.Execute;
begin
  { Place thread code here }
  FreeOnTerminate:=True;
  synchronize(GetFolserSize);
end;

end.

⌨️ 快捷键说明

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