[原创]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