Delphi 文件操作的封装

页面导航:首页 > 软件编程 > Delphi > Delphi 文件操作的封装

Delphi 文件操作的封装

来源: 作者: 时间:2016-01-21 09:33 【

Unit Name: FileOperAuthor: liubinDate: 2010-12-07Purpose: 用于文件及文件夹操作History:-----------------------------------------------------------------------------}unit FileOper;interfaceuse...

 Unit Name: FileOper

 Author:    liubin
 Date:      2010-12-07
 Purpose:   用于文件及文件夹操作
 History:
-----------------------------------------------------------------------------}
unit FileOper;

interface
uses Windows,shellapi,SysUtils;

type
  TFileOper =class
    public
      class  function WinErasefile(Owner: Integer; WichFiles: string; SendToRecycleBin, Confirm: Boolean): Boolean;
      class  function WinErasepath(Owner: Integer; WichFiles: string; SendToRecycleBin, Confirm: Boolean): Boolean;
      class  function WinMovepath(Owner:Integer;FromFile, Tofile:string;ReNameOnCollision, Confirm:Boolean):Boolean;
      class  function WinMovefile(Owner:Integer;FromFile, Tofile:string;ReNameOnCollision, Confirm:Boolean):Boolean;
      class  function WinCopypath(Owner: Integer; FromFile, Tofile: string;ReNameOnCollision, Confirm: Boolean): Boolean;
      class  function WinCopyfile(Owner: Integer; FromFile, Tofile: string;ReNameOnCollision, Confirm: Boolean): Boolean;
      class  function IsFileInUse(fName: string): boolean;
  end;

implementation

class function TFileOper.IsFileInUse(fName: string): boolean;
var
  HFileRes: HFILE;
begin
   Result := false;
   if not FileExists(fName) then //如果文件不存在
     exit;
   HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE,
     0 {this is the trick!}, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   Result := (HFileRes = INVALID_HANDLE_VALUE);
   if not Result then
     CloseHandle(HFileRes);
end;
class function TFileOper.WinErasefile(Owner: Integer; WichFiles: string; SendToRecycleBin, Confirm: Boolean): Boolean;
//用于将文件直接删除或移动到回收站
var
  Struct : TSHFileOpStructA;
begin
  FillChar(Struct, SizeOf(Struct), 0);
  While pos(';', WichFiles)>0 do
  WichFiles[pos(';', WichFiles)] := #0;
  WichFiles := WichFiles + #0#0;
  with Struct do
  begin
  wnd := Owner;
  wFunc := FO_Delete;
  pFrom := PChar(WichFiles);
  pTo := nil;
  If not Confirm then fFlags := FOF_NOCONFIRMATION;
  If SendToRecycleBin then fFLags := fFlags or FOF_ALLOWUNDO or FOF_FILESONLY
  else fFlags := fFlags or 0 or FOF_FILESONLY;
  hNameMappings := nil;
  lpszProgressTitle := nil;
  end;
  result := (SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted);
end;

 

class function TFileOper.WinErasepath(Owner: Integer; WichFiles: string; SendToRecycleBin, Confirm: Boolean): Boolean;
//用于将目录直接删除或移动到回收站
var
  Struct : TSHFileOpStructA;
begin
  FillChar(Struct, SizeOf(Struct), 0);
  While pos(';', WichFiles)>0 do
  WichFiles[pos(';', WichFiles)] := #0;
  WichFiles := WichFiles + #0#0;
  with Struct do
  begin
  wnd := Owner;
  wFunc := FO_Delete;
  pFrom := PChar(WichFiles);
  pTo := nil;
  If not Confirm then fFlags := FOF_NOCONFIRMATION;
  If SendToRecycleBin then fFLags := fFlags or FOF_ALLOWUNDO
  else fFlags := fFlags or 0 or FOF_FILESONLY;
  hNameMappings := nil;
  lpszProgressTitle := nil;
  end;
  result := (SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted);
end;


class  function TFileOper.WinMovepath(Owner:Integer;FromFile, Tofile:string;ReNameOnCollision, Confirm:Boolean):Boolean;
//用于将目录进行移动
var
  Struct : TSHFileOpStructA;
  MultDest: Boolean;
begin
  FillChar(Struct, SizeOf(Struct), 0);
  MultDest := pos(';', ToFile)>0;
  While pos(';', FromFile)>0 do
  FromFile[pos(';', FromFile)] := #0;
  While pos(';', ToFile)>0 do
  ToFile[pos(';', ToFile)] := #0;
  FromFile := FromFile + #0#0;
  ToFile := ToFile + #0#0;
  with Struct do
  begin
  wnd := Owner;
  wFunc := FO_Move;
  pFrom := PChar(FromFile);
  pTo := PChar(ToFile);
  fFlags := FOF_ALLOWUNDO;
  If MultDest then fFLags := fFlags or FOF_MULTIDESTFILES;
  If ReNameOnCollision then fFLags := fFlags or FOF_RENameONCOLLISION;
  If Confirm then fFLags := fFlags or FOF_NOCONFIRMATION;
  hNameMappings := nil;
  lpszProgressTitle := nil;
  end;
  result := (SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted);
end;

class function TFileOper.WinMovefile(Owner:Integer;FromFile, Tofile:string;ReNameOnCollision, Confirm:Boolean):Boolean;
//用于将文件进行移动
var
Struct : TSHFileOpStructA;
MultDest: Boolean;
begin
  FillChar(Struct, SizeOf(Struct), 0);
  MultDest := pos(';', ToFile)>0;
  While pos(';', FromFile)>0 do
  FromFile[pos(';', FromFile)] := #0;
  While pos(';', ToFile)>0 do
  ToFile[pos(';', ToFile)] := #0;
  FromFile := FromFile + #0#0;
  ToFile := ToFile + #0#0;
  with Struct do
  begin
  wnd := Owner;
  wFunc := FO_Move;
  pFrom := PChar(FromFile);
  pTo := PChar(ToFile);
  fFlags := FOF_ALLOWUNDO or FOF_FILESONLY;
  If MultDest then fFLags := fFlags or FOF_MULTIDESTFILES;
  If ReNameOnCollision then fFLags := fFlags or FOF_RENameONCOLLISION;
  If Confirm then fFLags := fFlags or FOF_NOCONFIRMATION;
  hNameMappings := nil;
  lpszProgressTitle := nil;
  end;
  result := (SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted);
end;

class function TFileOper.WinCopypath(Owner: Integer; FromFile, Tofile: string;ReNameOnCollision, Confirm: Boolean): Boolean;
//拷贝目录 www.2cto.com
var
  Struct : TSHFileOpStructA;
  MultDest: Boolean;
begin
  FillChar(Struct, SizeOf(Struct), 0); MultDest := pos(';', ToFile)>0;
  While pos(';', FromFile)>0 do
  FromFile[pos(';', FromFile)] := #0;
  While pos(';', ToFile)>0 do
  ToFile[pos(';', ToFile)] := #0;
  FromFile := FromFile + #0#0;
  ToFile := ToFile + #0#0;
  with Struct do
  begin
  wnd := Owner;
  wFunc := FO_Copy;
  pFrom := PChar(FromFile);
  pTo := PChar(ToFile);
  fFlags := FOF_ALLOWUNDO;
  If MultDest then
  fFLags := fFlags or FOF_MULTIDESTFILES;
  If ReNameOnCollision then
  fFLags := fFlags or FOF_RENameONCOLLISION;
  If not Confirm then
  begin
  fFLags := fFlags or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
  end;
  hNameMappings := nil;
  lpszProgressTitle := nil;
  end;
  result := (SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted);
end;

class function TFileOper.WinCopyfile(Owner: Integer; FromFile, Tofile: string;ReNameOnCollision, Confirm: Boolean): Boolean;
//拷贝文件
var
  Struct : TSHFileOpStructA;
  MultDest: Boolean;
begin
  FillChar(Struct, SizeOf(Struct), 0); MultDest := pos(';', ToFile)>0;
  While pos(';', FromFile)>0 do
    FromFile[pos(';', FromFile)] := #0;
  While pos(';', ToFile)>0 do
    ToFile[pos(';', ToFile)] := #0;
  FromFile := FromFile + #0#0;
  ToFile := ToFile + #0#0;
  with Struct do
  begin
    wnd := Owner;
    wFunc := FO_Copy;
    pFrom := PChar(FromFile);
    pTo := PChar(ToFile);
    fFlags := FOF_ALLOWUNDO or FOF_FILESONLY;
    If MultDest then
    fFLags := fFlags or FOF_MULTIDESTFILES;
    If ReNameOnCollision then
    fFLags := fFlags or FOF_RENameONCOLLISION;
    If not Confirm then
    begin
    fFLags := fFlags or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
    end;
    hNameMappings := nil;
    lpszProgressTitle := nil;
  end;
  result := (SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted);
end;

end.

摘自 #Define

 

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<