home *** CD-ROM | disk | FTP | other *** search
- unit FileUtil;
-
- interface
-
- const
- DEFSIZE_FILETRUNC: Byte = 32;
-
- function TruncFileNameAt(const FileName: String; MaxLen: Byte): String;
- { Truncates filename by omitting subdirectories }
-
- function TruncFileNameDef(const FileName: String): String;
- { Truncates filename, calls TruncFileNameAt with MaxLen = sizeFileTrunc }
-
- function JustFileName(const FileName: String): string;
- { Splits Filename in DirStr + NameStr + ExtStr. Returns NameStr only }
-
- function CopyFile(const SourceName, TargetName: String): Boolean;
- { Copies Source filename to Target file name, returns true if OK }
-
- function RenameToBackup(const FileName, BackupExt: String): Boolean;
- { Returns True if file exists, and could be renamed into a new filename using the
- ChangeFileExt function. BackupExt should include the '.' character }
-
- function CopyToBackup(const FileName, BackupExt: String): Boolean;
- { Returns True if file exists, and could be renamed into a new filename using the
- ChangeFileExt function. BackupExt should include the '.' character }
-
- function CommandPath: String;
- { full Returns executable path }
-
- function SafeRenameFile(const SourceName, TargetName: String): Boolean;
- { First copies Source to target, and if OK, deletes source. This works even OK when
- Source and Target are plcaed on different drives }
-
- implementation
-
- uses WinTypes, WinProcs, SysUtils, Classes, NumUtils;
-
- function TruncFileNameAt(const FileName: String; MaxLen: Byte): String;
- var Path: String;
- begin
- Result := FileName;
- if Length(Result) > MaxLen then
- begin
- Result := ExtractFileName(FileName);
- if Length(Result) < MaxLen then
- begin
- Path := ExtractFilePath(ExpandFileName(FileName));
- case MaxLen - Length(Result) of
- 1 : Result := '\' + Result;
- 2..5 : Result := Copy(Path, 1, 2) + Result;
- else
- Result := Copy(Path, 1, 3) + '..\' + Result;
- end;
- end;
- end;
- end;
-
- function TruncFileNameDef(const FileName: String): String;
- begin
- Result := TruncFileNameAt(FileName, DEFSIZE_FILETRUNC);
- end;
-
- function JustFileName(const FileName: String): String;
- var I: Integer;
- begin
- Result := ExtractFileName(FileName);
- I := Pos('.', Result);
- if I > 0 then
- Result := Copy(Result, 1, I - 1)
- end;
-
- function CommandPath: String;
- var Path: TFileName;
- begin
- Path := ParamStr(0);
- Result := ExtractFilePath(Path);
- if Result[Length(Result)] <> '\' then Result := Result + '\';
- end;
-
- function SafeRenameFile(const SourceName, TargetName: String): Boolean;
- begin
- { if drives are equal then rename else copy }
- if ExpandFileName(SourceName)[1] = ExpandFileName(TargetName)[1] then
- Result := RenameFile(SourceName, TargetName)
- else
- Result := CopyFile(SourceName, TargetName) and DeleteFile(SourceName);
- end;
-
- function CopyFile(const SourceName, TargetName: String): Boolean;
- const sizeBlock = 1024;
- var Source, Target: TFileStream;
- Buf: array[0..Pred(sizeBlock)] of Byte;
- M, Rest: LongInt;
- begin
- Result := False;
- if FileExists(SourceName) then
- begin
- Source := TFileStream.Create(SourceName, fmOpenRead);
- try
- Target := TFileStream.Create(TargetName, fmCreate);
- try
- Rest := Source.Size;
- while Rest > 0 do
- begin
- M := MinLong(sizeBlock, Rest);
- Source.Read(Buf, M);
- Target.Write(Buf, M);
- Dec(Rest, M);
- end;
- Result := True;
- finally
- Target.Destroy;
- end;
- finally
- Source.Destroy;
- end;
- end;
- end;
-
- function RenameToBackup(const FileName, BackupExt: String): Boolean;
- var BackupName: String;
- begin
- Result := False;
- if FileExists(FileName) and (CompareText(ExtractFileExt(FileName), BackupExt) <> 0) then
- begin
- BackupName := ChangeFileExt(FileName, BackupExt);
- if FileExists(BackupName) then Result := DeleteFile(BackUpName) else Result := True;
- Result := Result and RenameFile(FileName, BackupName);
- end;
- end;
-
- function CopyToBackup(const FileName, BackupExt: String): Boolean;
- var BackupName: String;
- begin
- Result := False;
- if FileExists(FileName) and (CompareText(ExtractFileExt(FileName), BackupExt) <> 0) then
- begin
- BackupName := ChangeFileExt(FileName, BackupExt);
- if FileExists(BackupName) then Result := DeleteFile(BackUpName) else Result := True;
- Result := Result and CopyFile(FileName, BackupName);
- end;
- end;
-
-
- end.
-