📄 smartfilecopy.pas
字号:
unit SmartFileCopy;
interface
uses classes, sysutils;
function SmartCopyFile(FromFile: String; ToFile: String): Integer;
function SmartCreateDir(Dir: String): Integer;
implementation
function SmartCopyFile(FromFile: String; ToFile: String): Integer;
var
InFileStream: TFileStream;
OutFileStream: TFileStream;
begin
SmartCopyFile:=99;
if not(FileExists(FromFile)) then SmartCopyFile:=1
else begin
try
InFileStream:=TFileStream.Create(FromFile,fmOpenRead);
OutFileStream:=TFileStream.Create(ToFile,fmCreate);
InFileStream.Seek(0,soFromBeginning);
OutFileStream.CopyFrom(InFileStream,InFileStream.Size);
SmartCopyFile:=0;
finally
InFileStream.Free;
OutFileStream.Free;
end;
end;
end;
function SmartCreateDir(Dir: String): Integer;
var
Levels: TStrings;
slash: Integer;
lower: String;
i,j: Integer;
begin
SmartCreateDir:=99;
{$I-}
MkDir(Dir);
{$I+}
if IOResult<>0 then begin
{$I-}
ChDir(Dir);
{$I+}
if IOResult<>0 then begin
// split directory
Levels:=TStringList.Create;
lower:=Dir;
repeat
slash:=Pos('\',lower);
if slash>0 then begin
Levels.Add(Copy(lower,1,slash-1));
lower:=Copy(lower,slash+1,Length(lower)-slash);
end;
until slash=0;
Levels.Add(lower);
if Levels.Count>0 then begin
for i:=0 to Levels.Count-1 do begin
lower:='';
for j:=0 to i do lower:=lower+Levels.Strings[j]+'\';
lower:=Copy(lower,1,Length(Lower)-1);
if i=Levels.Count-1 then begin
{$I-}
MkDir(lower);
{$I+}
SmartCreateDir:=0;
end
else begin
{$I-}
MkDir(lower);
{$I+}
end;
end;
end
else SmartCreateDir:=2;
Levels.Free;
end
else SmartCreateDir:=1;
end
else SmartCreateDir:=0;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -