{*******************************************************}
{ }
{ 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.