2011-02-25 293 views
2

我用ForceDirectories功能是这样的:ForceDirectories返回False

ForceDirectories('C:/Path/To/Dir'); 

,并返回False并创建完全没有目录。 GetLastError返回0.我正在运行具有管理权限的程序。

如果我做

ForceDirectories('C:/Path'); 
ForceDirectories('C:/Path/To'); 
ForceDirectories('C:/Path/To/Dir'); 

每次调用成功,并创建目录。但是,这会使ForceDirectories函数的有用性无效。有谁知道它为什么这样表现? (我正在看你大卫)

回答

9

您的路径分隔符更改为这是正确的平台(Win32的)一切都会好:

ForceDirectories('c:\Path\To\Dir'); 

为了让跨平台的代码移植(以备将来的某个时候,这可能是有关你的Delphi代码)你可以:

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

    s := StringReplace(s, '/', PathDelim, [rfReplaceAll]); 
    s := StringReplace(s, '\', PathDelim, [rfReplaceAll]); 
    ForceDirectories(s); 

这可能会重新使用(只搜索得到改善/替换这是毫无= PathDelim),但表明了原则的象征。

+1

其实/和\是Windows的有效路径分隔符。 – Kokonotsu

+0

...但只有后者是“正常的”。 –

+2

在这种情况下,“对于你的平台是正确的”意思是“正确的由Delphi RTL标识”,因为ForceDirectories()不直接调用任何Windows API来创建路径,而是调用CreateDir来为总路径中的每个连续元素存在。为了识别路径元素,它使用“PathDelim”打破了路径,当编译器定义MSWINDOWS时,它被设置为'\'。因此,对于Win32上的ForceDirectories,正确的路径分隔符是'\'。 – Deltics

5

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

+0

大多数处理路径的事情,在Windows中只有反斜杠。 –