{*******************************************************} { } { Methods of Sting } { } { 版权所有 (C) 2020 KngStr } { } {*******************************************************} unit ksString; interface /// /// 创建空白文件 /// function CreateBlankFile(S: string): Boolean; /// /// 自动为已存在文件名加数字 /// function AutoRenameFileName(AFile: string): string; /// /// 自动替换文件名中的非法字符为 /// procedure ReplaceInvalidFileNameChars(var FileName: string; AChar: Char = '_'); /// /// 格式化秒为时间,冒号分割 /// function FormatSeconds(const AValue: Int64): string; overload; /// /// 格式化秒为时间,冒号分割 /// function FormatSeconds(const AValue: Integer): string; overload; /// /// 格式化秒为时间,冒号分割 /// function FormatSeconds(const AValue: Double): string; overload; implementation uses System.Classes, System.SysUtils, System.IOUtils; function CreateBlankFile(S: string): Boolean; var FStrm: TFileStream; begin Result := False; try FStrm := TFileStream.Create(S, fmCreate); if FStrm = nil then Exit; Result := True; FreeAndNil(FStrm); except FStrm := nil; end; end; function AutoRenameFileName(AFile: string): string; var I: Integer; sPath, sExt: string; begin Result := AFile; I := 0; sPath := ChangeFileExt(Result, ''); sExt := ExtractFileExt(Result); while FileExists(Result) do begin Inc(I); Result := Format('%s(%d)%s', [sPath, I, sExt]); end; end; procedure ReplaceInvalidFileNameChars(var FileName: string; AChar: Char); var PFileName: PChar; FileNameLen: Integer; Ch: Char; I: Integer; begin I := 0; PFileName := PChar(FileName); FileNameLen := Length(FileName); while I < FileNameLen do begin Ch := PFileName[I]; if not TPath.IsValidFileNameChar(Ch) then PFileName[I] := AChar else Inc(I); end; end; function FormatSeconds(const AValue: Double): string; overload; var h, m, s, ms: Integer; begin ms := Trunc(Frac(AValue) * 1000); s := Trunc(AValue); m := s div 60; h := m div 60; if h > 0 then Result := Format('%.2d:%.2d:%.2d.%.3d', [h, m mod 60, s mod 60, ms]) else Result := Format('%.2d:%.2d.%.3d', [m, s mod 60, ms]); end; function FormatSeconds(const AValue: Int64): string; var h, m, s: Integer; begin s := AValue; m := s div 60; h := m div 60; if h > 0 then Result := Format('%.2d:%.2d:%.2d', [h, m mod 60, s mod 60]) else Result := Format('%.2d:%.2d', [m, s mod 60]); end; function FormatSeconds(const AValue: Integer): string; overload; begin FormatSeconds(Int64(AValue)); end; end.