| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 | 
							- unit BaseUtils;
 
- {==================================================================
 
-  Basic file handling utilities  /  Version 1.2  / 11.1999
 
-  ========================================================
 
-     Description:
 
-     ============
 
-     Basic utilities useful for handling files or directories.
 
-     Used by the components TDriveView and TDirView.
 
-     Author:
 
-     =======
 
-     (c) Ingo Eckel 5/1998
 
-     Sodener Weg 38
 
-     65812 Bad Soden
 
-     Germany
 
-     Modifications (for WinSCP):
 
-     ===========================
 
-     (c) Martin Prikryl 2001, 2002
 
- {==================================================================}
 
- interface
 
- uses
 
-   ShlObj;
 
- type
 
-   TDateTimePrecision = (tpNone, tpDay, tpMinute, tpSecond, tpMillisecond);
 
-   // order choosen so that for previous bool value, false maps to fbNone,
 
-   // and true maps to new default fbKilobytes, although functionaly it is fbShort
 
-   TFormatBytesStyle = (fbNone, fbKilobytes, fbShort);
 
- function ExtractFileNameOnly(Name: string): string;
 
- function FileOrDirExists(FileName: string): Boolean;
 
- function FormatBytes(Bytes: Int64; Style: TFormatBytesStyle = fbShort; UseUnitsForBytes: Boolean = True): string;
 
- function FormatPanelBytes(Bytes: Int64; Style: TFormatBytesStyle): string;
 
- procedure FreePIDL(var PIDL: PItemIDList);
 
- function StrContains(Str1, Str2: string): Boolean;
 
- procedure ReduceDateTimePrecision(var DateTime: TDateTime;
 
-   Precision: TDateTimePrecision);
 
- function SpecialFolderLocation(Folder: Integer; var Path: string;
 
-   var PIDL: PItemIDList): Boolean; overload;
 
- function SpecialFolderLocation(Folder: Integer; var Path: string): Boolean; overload;
 
- function FormatLastOSError(Message: string): string;
 
- resourcestring
 
-   SNoValidPath = 'Can''t find any valid path.';
 
-   SByte = 'B';
 
-   SKiloByte = 'KB';
 
-   SMegaByte = 'MB';
 
-   SGigaByte = 'GB';
 
- implementation
 
- uses
 
-   Windows, SysUtils, DateUtils, SysConst, Math, PIDL, Forms;
 
- function StrContains(Str1, Str2: string): Boolean;
 
- var
 
-   Index: Integer;
 
- begin
 
-   for Index := 1 to Length(Str1) do
 
-     if Pos(Str1[Index], Str2) <> 0 then
 
-     begin
 
-       Result := True;
 
-       Exit;
 
-     end;
 
-   Result := False;
 
- end; {StringCountains}
 
- function FileOrDirExists(FileName: string): Boolean;
 
- begin
 
-   Result := FileExists(FileName) or DirectoryExists(FileName);
 
- end; {FileOrDirExists}
 
- function ExtractFileNameOnly(Name: string): string;
 
- var
 
-   Ext: string;
 
- begin
 
-   Result := ExtractFileName(Name);
 
-   Ext := ExtractFileExt(Name);
 
-   if Ext <> '' then
 
-     Delete(Result, Length(Result)-Length(Ext)+1, Length(Ext));
 
- end; {ExtractFileNameOnly}
 
- // Windows Explorer size formatting
 
- // size  properties/status bar      size column
 
- // 1023             1023 bytes             1 KB
 
- // 1 KB                1,00 KB             1 KB
 
- // 2 KB                2,00 KB             2 KB
 
- // 2 KB + 1 B          2,00 KB             3 KB
 
- // 2 KB + 12 B         2,01 KB             3 KB
 
- // 10 KB - 1B          9,99 KB            10 KB
 
- // 10 KB              10,0  KB            10 KB
 
- // 12 KB              12,0  KB            12 KB
 
- // 12 KB + 1 B        12,0  KB            13 KB
 
- // 12 KB + 12 B       12,0  KB            13 KB
 
- // 12 KB + 128 B      12,1  KB            13 KB
 
- // 100 KB            100    KB           100 KB
 
- // 100 KB + 1 B      100    KB           101 KB
 
- // 500 KB            500    KB           500 KB
 
- // 1000 KB - 1 B     999    KB         1 000 KB
 
- // 1000 KB             0,97 MB         1 000 KB
 
- // 1 MB                1,00 MB         1 024 KB
 
- // 1000 MB - 1 B     999    MB     1 024 000 KB
 
- // 1000 MB             0,97 GB     1 024 000 KB
 
- // 1 GB - 1            0,99 GB     1 048 576 KB
 
- // 1 GB                1,00 GB     1 048 576 KB
 
- // 1 GB + 10 MB        1,00 GB     1 058 816 KB
 
- // 1 GB + 12 MB        1,01 GB     1 060 864 KB
 
- function FormatBytes(Bytes: Int64; Style: TFormatBytesStyle; UseUnitsForBytes: Boolean): string;
 
- var
 
-   SizeUnit: string;
 
-   Value: Int64;
 
-   Order: Int64;
 
-   EValue: Extended;
 
-   Format: string;
 
- begin
 
-   if (Style = fbNone) or ((Style = fbShort) and (Bytes < Int64(1024))) then
 
-   begin
 
-     EValue := Bytes;
 
-     Format := '#,##0';
 
-     if UseUnitsForBytes then
 
-       Format := Format + ' "' + SByte + '"';
 
-   end
 
-     else
 
-   if Style = fbKilobytes then
 
-   begin
 
-     Value := Bytes div 1024;
 
-     if (Bytes mod 1024) > 0 then
 
-       Inc(Value);
 
-     EValue := Value;
 
-     Format := '#,##0 "' + SKiloByte + '"';
 
-   end
 
-     else
 
-   begin
 
-     if Bytes < Int64(1000*1024) then
 
-     begin
 
-       Order := 1024;
 
-       SizeUnit := SKiloByte;
 
-     end
 
-       else
 
-     if Bytes < Int64(1000*1024*1024) then
 
-     begin
 
-       Order := 1024*1024;
 
-       SizeUnit := SMegaByte;
 
-     end
 
-       else
 
-     begin
 
-       Order := 1024*1024*1024;
 
-       SizeUnit := SGigaByte;
 
-     end;
 
-     EValue := Bytes / Order;
 
-     if EValue >= 100 then
 
-     begin
 
-       EValue := Floor(EValue);
 
-       Format := '#,##0';
 
-     end
 
-       else
 
-     if EValue >= 10 then
 
-     begin
 
-       EValue := Floor(EValue * 10) / 10;
 
-       Format := '#0.0';
 
-     end
 
-       else
 
-     begin
 
-       EValue := Floor(EValue * 100) / 100;
 
-       Format := '0.00';
 
-     end;
 
-     Format := Format + ' "' + SizeUnit + '"';
 
-   end;
 
-   Result := FormatFloat(Format, EValue);
 
- end;
 
- function FormatPanelBytes(Bytes: Int64; Style: TFormatBytesStyle): string;
 
- begin
 
-   Result := FormatBytes(Bytes, Style, (Style <> fbNone));
 
- end;
 
- procedure FreePIDL(var PIDL: PItemIDList);
 
- begin
 
-   if PIDL <> nil then
 
-   begin
 
-     try
 
-       ShellMalloc.Free(PIDL);
 
-       PIDL := NIL;
 
-     except
 
-       PIDL := NIL;
 
-     end;
 
-   end;
 
- end; {FreePIDL}
 
- // duplicated in RemoteFiles.cpp
 
- procedure ReduceDateTimePrecision(var DateTime: TDateTime;
 
-   Precision: TDateTimePrecision);
 
- var
 
-   Y, M, D, H, N, S, MS: Word;
 
- begin
 
-   if Precision = tpNone then DateTime := 0
 
-     else
 
-   if Precision <> tpMillisecond then
 
-   begin
 
-     DecodeDateTime(DateTime, Y, M, D, H, N, S, MS);
 
-     case Precision of
 
-       tpDay:
 
-         begin
 
-           H := 0;
 
-           N := 0;
 
-           S := 0;
 
-           MS := 0;
 
-         end;
 
-       tpMinute:
 
-         begin
 
-           S := 0;
 
-           MS := 0;
 
-         end;
 
-       tpSecond:
 
-         begin
 
-           MS := 0;
 
-         end;
 
-     end;
 
-     DateTime := EncodeDate(Y, M, D) + EncodeTime(H, N, S, MS);
 
-   end;
 
- end;
 
- function SpecialFolderLocation(Folder: Integer; var Path: string;
 
-   var PIDL: PItemIDList): Boolean;
 
- begin
 
-   SetLength(Path, MAX_PATH);
 
-   Result :=
 
-     (not Failed(SHGetSpecialFolderLocation(Application.Handle, Folder, PIDL))) and
 
-     SHGetPathFromIDList(PIDL, PChar(Path));
 
-   if Result then
 
-   begin
 
-     SetLength(Path, StrLen(PChar(Path)));
 
-   end
 
-     else
 
-   begin
 
-     Path := '';
 
-   end;
 
- end;
 
- function SpecialFolderLocation(Folder: Integer; var Path: string): Boolean;
 
- var
 
-   PIDL: PItemIDList;
 
- begin
 
-   Result := SpecialFolderLocation(Folder, Path, PIDL);
 
- end;
 
- function FormatLastOSError(Message: string): string;
 
- var
 
-   LastError: Integer;
 
- begin
 
-   Result := Message;
 
-   LastError := GetLastError;
 
-   if LastError <> 0 then
 
-     Result := Result + #13#10 + #13#10 + Format(SOSError, [LastError, SysErrorMessage(LastError), '']);
 
- end;
 
- initialization
 
- end.
 
 
  |