[原创]Delphi 目录函数:ForceDirectories 和 CreateDir 的详细介绍

[原创]Delphi 目录函数:ForceDirectories 和 CreateDir 的详细介绍

引用单元:SysUtils

1、CreateDir 创建一个新目录

function CreateDir(const Dir: string): Boolean;   //创建一级目录  父目录必需存在
function CreateDir(const Dir: string): Boolean;
begin
  Result := CreateDirectory(PChar(Dir), nil);
end;

返回值:如果成功创建了新目录,则返回值为true;如果发生错误,则返回值为false。

2、ForceDirectories  创建新目录,包括根据需要创建父目录。

function ForceDirectories(Dir: string): Boolean;    //创建多级目录  父目录不必存在   (Force 有暴力、强制的意思)   
function ForceDirectories(Dir: string): Boolean;
var
  E: EInOutError;
begin
  Result := True;
  if Dir = '' then
  begin
    E := EInOutError.CreateRes(@SCannotCreateDir);
    E.ErrorCode := 3;
    raise E;
  end;
  Dir := ExcludeTrailingPathDelimiter(Dir);
{$IFDEF MSWINDOWS}
  if (Length(Dir) < 3) or DirectoryExists(Dir)
    or (ExtractFilePath(Dir) = Dir) then Exit; // avoid 'xyz:\' problem.
{$ENDIF}
{$IFDEF LINUX}
  if (Dir = '') or DirectoryExists(Dir) then Exit;
{$ENDIF}
  Result := ForceDirectories(ExtractFilePath(Dir)) and CreateDir(Dir);
end;

ForceDirectory按照Dir中的指定创建一个新目录,该目录必须是完全限定的路径名。如果路径中给出的目录尚不存在,ForceDirectory会尝试创建它们。

返回值:如果ForceDirectory成功创建了所有必要的目录,则返回true;如果无法创建所需的目录,则返回false。

重要提示:不要使用空字符串调用ForceDirectory。这样做会导致ForceDirectory引发异常。

FileCtrl单元(仅限Windows)还包含ForceDirectory函数。但是,不推荐使用FileCtrl版本,而首选SysUtils版本,即使代码不需要跨平台。

3、CreateDir 和 ForceDirectories 的 区别

//例如:现有目录:D:\目录1

//想要创建:D:\目录1\目录2\目录3\目录4  不存在的文件目录有 :目录2\目录3\目录4  

ForceDirectories 函数 会同时创建这三个目录  目录2、目录3、目录4

CreateDir 函数 如果不存在  目录2 这个目录,则返回创建 [目录4] 文件夹失败

 

4、示例:

4.1 CreateDir

uses FileCtrl;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not DirectoryExists('c:\temp') then
    if not CreateDir('C:\temp') then
    raise Exception.Create('不能创建 c:\temp');
end;

4.2 ForceDirectories

procedure TForm1.Button1Click(Sender: TObject);
var
  Dir: string;
begin
  Dir := 'C:\目录1\目录2\目录3';

  if ForceDirectories(Dir) then
    Label1.Caption := Dir + ' 已经创建';
end;

  

  

 

创建时间:2019.07.30  更新时间:2022.02.16

posted on 2019-07-30 16:48  滔Roy  阅读(1471)  评论(0编辑  收藏  举报

导航