【发布时间】:2010-08-09 13:30:49
【问题描述】:
我正在使用 Delphi 2010,我的程序想要获取系统的临时路径。我正在使用 TPath.GetTempPath 并且一切正常……至少对我和我的同事来说。但在某些客户机器上,此方法返回(当然)不存在的裁剪路径。我发现问题似乎是对 GetLongPathName() 的底层调用的结果。
完整的代码如下所示:
[...]
var
TmpDir : String;
Len : Integer;
begin
[... Call to GetTempPath succeeds and we have a valid temp directory in short "~" notation in var TmpDir ...]
Len := GetLongPathName(PChar(TmpDir), nil, 0); // Len = 37
SetLength(TmpDir, Len - 1); // We want to set the len of TmpDir to 37 - 1.
GetLongPathName(PChar(TmpDir), PChar(TmpDir), Len); // Only 32 (instead of 36) characters are copied - so we have a cropped path - But why?!
end;
[...]
这只发生在某些系统上,我不知道为什么。我找到了一个讨厌的解决方法,但我想知道这里发生了什么。
有人可以解释一下吗?
【问题讨论】:
-
您能给我们提供正确(预期)和错误(实际)路径名的示例吗?可能是 Unicode 或编码问题?
-
我们最初也是这么认为的,但是路径名不包含任何可能导致 Unicode 转换问题的字符。 GetLongPathName 的结果路径名仅缺少最后 4 个字符(“Temp\”的“emp\”) - 所有其他字符均有效。
标签: delphi winapi path delphi-2010