当前位置:编程学习 > Delphi >>

Delphi 文件操作的封装

 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;
//用于将文件进行移动www.zzzyk.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_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.zzzyk.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 := ni

补充:软件开发 , Delphi ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,