ForceDirectories返回False

Kok*_*tsu 3 delphi directory delphi-2010

我正在使用这样的ForceDirectories功能:

ForceDirectories('C:/Path/To/Dir');
Run Code Online (Sandbox Code Playgroud)

它返回False并且根本没有创建目录.GetLastError返回0.我正在运行具有管理权限的程序.

如果我做

ForceDirectories('C:/Path');
ForceDirectories('C:/Path/To');
ForceDirectories('C:/Path/To/Dir');
Run Code Online (Sandbox Code Playgroud)

每次调用都成功,并创建目录.但是,这会使ForceDirectories功能失效.有谁知道它为什么会这样?(我在看着你大卫)

Del*_*ics 11

将您的路径分隔符更改为适合您的平台(Win32)的路径分隔符,一切都会很好:

  ForceDirectories('c:\Path\To\Dir');
Run Code Online (Sandbox Code Playgroud)

为了使代码可以跨平台移植(为将来可能与Delphi代码相关的时间做准备),您可以:

  s := 'c:/Path/To/Dir';  // << example

  s := StringReplace(s, '/', PathDelim, [rfReplaceAll]);
  s := StringReplace(s, '\', PathDelim, [rfReplaceAll]);
  ForceDirectories(s);
Run Code Online (Sandbox Code Playgroud)

这可以改进以便重复使用(仅搜索/替换no = PathDelim的符号),但演示了原理.

  • "对于您的平台是正确的"在这种情况下意味着"由Delphi RTL识别的正确",因为ForceDirectories()不直接调用任何Windows API来创建路径,而是为不存在的总路径中的每个连续元素调用CreateDir .为了识别路径元素,它使用"PathDelim"来破坏路径,当编译器定义MSWINDOWS时,将其设置为"\".因此,对于Win32上的ForceDirectories,正确的路径分隔符为'\'. (3认同)
  • 实际上,/和\是Windows的有效路径分隔符. (2认同)

Kok*_*tsu 5

显然ForceDirectories只喜欢\的,而不是/...愚蠢的问题解决了.