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

📄 crc.dpr

📁 CRC校验算法 CRC校验算法 CRC校验算法 CRC校验算法
💻 DPR
字号:
program crc;

{$APPTYPE CONSOLE}
{$WARN SYMBOL_PLATFORM OFF}

uses crc32, SysUtils, Windows;

var ConScrBuf: Console_Screen_Buffer_Info;
    PReport: pointer;
    //Options:
    DisplayFullFilename: boolean = False;
    IncludeHidden: boolean = False;
    IncludeSystem: boolean = False;
    ScanSubDirs: boolean = False;
    DisplayHelp: boolean = False;
    SupressReport: boolean = False;
    Buffer: Integer = $FFFFF; //1 Megabyte

procedure ShowHelp;
begin
Writeln('CRC32 Calculator v1.11 - Andrew Koupparis 2003');
Writeln('Usage: CRC32 [/?]');
Writeln('       CRC32 filename [/F /H /S /D /Bxxxx /R]');
Writeln;
Writeln('Wildcards are allowed');
Writeln('/F to display full filename');
Writeln('/H to include hidden files');
Writeln('/S to include system files');
Writeln('/D to scan subdirectories');
Writeln('/Bxxxx to set the buffer size in Kbytes - Default = 1024');
Writeln('/R to supress progress report');
Writeln('/? displays this screen');
Writeln('Parameters may stack');
end;

procedure ShowProgress(Percentage: Integer);
begin
Write(IntToStr(Percentage)+'%');
SetConsoleCursorPosition(TTextRec(Output).Handle,ConScrBuf.dwCursorPosition);
end;

procedure ScanFile(Filename:TFilename);
var FileResult: Cardinal;
begin
 if DisplayFullFilename then
       Write(ExpandFileName(Filename)+' - ') else
       Write(ExtractFileName(Filename)+' - ');
 GetConsoleScreenBufferInfo(TTextRec(Output).Handle,ConScrBuf); //Store our position
 FileResult:=FileCRC32(Filename,PReport);
 if CRCError then Writeln('Error') else Writeln('CRC32: '+IntToHex(FileResult,8));
end;

procedure ScanPath(Path:string; Attrib:Integer);
var DirRec, SearchRec: TSearchRec;
    Filename: TFilename;
    Dir: String;
begin
 Dir:=ExtractFilePath(Path);
 if FindFirst(Path,Attrib,SearchRec)=0 then begin   //file search
  repeat
   Filename:=Dir+SearchRec.Name;
   ScanFile(FileName);
  until FindNext(SearchRec)<>0;
  SysUtils.FindClose(SearchRec);
 end;
 if ScanSubDirs then begin                         //check for directories
  if FindFirst(ExtractFilePath(Path)+'*.*',faDirectory,DirRec)<>0 then Exit;
  repeat
   if (DirRec.Attr and faDirectory)=faDirectory then
   if (DirRec.Name<>'.') and (DirRec.Name<>'..') then
   ScanPath(ExtractFilePath(Path)+DirRec.Name+'\'+ExtractFileName(Path),Attrib);
  until FindNext(DirRec)<>0;
  SysUtils.FindClose(DirRec);
 end;
end;

procedure CheckParameters;
var Count, Index: Integer;
    {Separator: set of Char;}
    CheckStr: string;
begin
 {Separator:=['/'];}
 if ParamCount=0 then begin DisplayHelp:=True; Exit; end;
 for count:=1 to ParamCount do
  if ParamStr(count)[1]='/' {in Separator} then begin
    CheckStr:=UpperCase(ParamStr(count));
    index:=2;
    while index<=length(CheckStr) do begin
     if CheckStr[index]='F' then DisplayFullFilename:=True;
     if CheckStr[index]='H' then IncludeHidden:=True;
     if CheckStr[index]='S' then IncludeSystem:=True;
     if CheckStr[index]='D' then ScanSubDirs:=True;
     if CheckStr[index]='?' then begin DisplayHelp:=True; Exit; end;
     if CheckStr[index]='R' then SupressReport:=True;
     if CheckStr[index]='B' then
       try
        Buffer:=StrToInt(Copy(CheckStr,index+1,Length(CheckStr)))*1024;
       except
        DisplayHelp:=True;
        Exit;
       end;
     index:=index+1;  //check if next char is option
    end;
  end;
end;

var Path: String;
    Attrib: Integer;
begin
 CheckParameters;
 MaxCRCBufferSize:=Buffer;
 if DisplayHelp then ShowHelp else
 begin
  Path:=ParamStr(1);
  Attrib:=0;
  If IncludeHidden then Attrib:=faHidden;
  if IncludeSystem then Attrib:=Attrib+faSysFile;
  if SupressReport then PReport:=nil else PReport:=@ShowProgress;
  ScanPath(Path,Attrib);
 end;
end.

⌨️ 快捷键说明

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