delphi中CreateDirectory和CreateDir有啥区别?创建文件夹的同时能定义文件夹的属性吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中CreateDirectory和CreateDir有啥区别?创建文件夹的同时能定义文件夹的属性吗?相关的知识,希望对你有一定的参考价值。
CreateDirectory可以再创建目录是指定文件夹的属性,CreateDir则不能。 参考技术A CreateDirectory 可以创建多级目录追问这个不会有!ForceDirectories可以创建多级
追答ForceDirectories 对,我记错了.
参考技术B CreateDir也是通过调用CreateDirectory实现的,只是简化了参数,并且增加了LINUX支持。CreateDirectory只能用于windows编程。CreateDir在linux下Kylix也能调用,使代码的兼容性、可移植性更强。
在SysUtils单元中:
function CreateDir(const Dir: string): Boolean;
begin
$IFDEF MSWINDOWS
Result := CreateDirectory(PChar(Dir), nil);
$ENDIF
$IFDEF LINUX
Result := __mkdir(PChar(Dir), mode_t(-1)) = 0;
$ENDIF
end;追问
有什么函数创建文件夹的同时又能同时定义文件夹的属性呢?
追答CreateDirectory
追问CreateDirectory,第二个参数为nil是默认一般属性,那如果要设为只读什么的,如何设置呢?
在 C# 中使用 CreateDirectory 避免 NotSupportedException
【中文标题】在 C# 中使用 CreateDirectory 避免 NotSupportedException【英文标题】:Avoiding NotSupportedException using CreateDirectory in c# 【发布时间】:2011-09-14 23:42:17 【问题描述】:我正在尝试递归地创建一堆目录,并且某些目录名称包含“:”字符,其中会引发上述异常。我希望有办法避免这种情况? 下面是我正在使用的代码片段:
foreach (TagLib.File tagFile in tagFiles)
GetInfo(tagFile, targetDir);
if (!Directory.Exists(TargetFullPath))
Directory.CreateDirectory(TargetFullPath);
System.IO.File.Copy(FilePath, TargetFullPath + "\\" + tagFile.Tag.Title + TargetExt);
...
'TargetFullPath' = "G:\Users\Jon\Desktop\musictest\Journey\Journey: Greatest Hits"
非常感谢:)
【问题讨论】:
:
不允许出现在目录或文件名中。就是这样。没有解决方法。只需将其替换为 _
或类似的东西。
与问题不完全相关,但您应该在构建路径字符串时尝试使用Path.Combine。
【参考方案1】:
冒号是你不能使用的字符之一,但你可以很容易地替换它。为了确保您只替换文件名部分中的字符(这样您就不会清除构成文件路径其余部分的反斜杠),您可以使用:
Path.Combine(Path.GetDirectoryName(TargetFullPath),Path.GetFileName(TargetFullPath).Replace(":","_"));
假设文件名 (see this list) 中可能存在其他非法字符,您将需要更健壮的内容,例如 Regex 语句。
【讨论】:
以上是关于delphi中CreateDirectory和CreateDir有啥区别?创建文件夹的同时能定义文件夹的属性吗?的主要内容,如果未能解决你的问题,请参考以下文章
RichEdit 2.0 使用单个 CR 字符作为换行符会引发 SelStart 计算(Delphi XE2)
Directory.CreateDirectory() 不在 ZipFile 中创建文件夹