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

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

引用单元:SysUtils

1、CreateDir 创建一个新目录

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

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

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

1
function ForceDirectories(Dir: string): Boolean;    //创建多级目录  父目录不必存在   (Force 有暴力、强制的意思)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

1
2
3
4
5
6
7
8
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

1
2
3
4
5
6
7
8
9
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   滔Roy  阅读(1499)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报

导航

点击右上角即可分享
微信分享提示