XE3的ChangeFileExt函数存在的问题

126次阅读
没有评论

ChangeFileExt 函数提供的功能是替换文件扩展名,比如说有文件 C:\Intel\Logs\IntelChipset.log,则:

ChangeFileExt(‘C:\Intel\Logs\IntelChipset.log’, ”);

返回值为:C:\Intel\Logs\IntelChipset

但有一种特殊文件,例如:C:\Pic\.png,可以理解为文件名为空,扩展名为 ’.png’,(资源管理器直接改不允许出现这种文件名,但事实上存在,也可以建立。活生生的例子:大家如果安装的是完全版的 XE2,可在以下位置找到两个这样的文件.classpath 和.project,

位置:公用文档下

RAD Studio\9.0\Samples\Delphi\DataSnap\connectors\AndroidClients\AndroidDemoClientApp)

针对这样的文件,XE3 的 ChangeFileExt 函数就存在问题。如下:

ChangeFileExt(‘C:\Pic\.png’, ”);

XE2 及之前版本返回值:C:\Pic\

XE3 版本返回值:C:\Pic\.png

XE4 版本返回值:C:\Pic\

由此看出,XE3 版本的 ChangeFileExt 是存在问题的,请大家要小心哦!

以下是不同版本的 ChangeFileExt 函数源代码,大家可以观察它们的不同之处:

[delphi]//XE2 及之前版本的 ChangeFileExt 函数
function ChangeFileExt(const FileName, Extension: string): string;
var
I: Integer;
begin
I := LastDelimiter(‘.’ + PathDelim + DriveDelim,Filename);
if (I = 0) or (FileName[I] <> ‘.’) then I := MaxInt;
Result := Copy(FileName, 1, I – 1) + Extension;
end;

//XE3 的 ChangeFileExt 函数
function ChangeFileExt(const FileName, Extension: string): string;
var
I: Integer;
begin
I := FileName.LastDelimiter(‘.’ + PathDelim + DriveDelim);
if (I < Low(string)) or (FileName.Chars[I] <> ‘.’) then I := MaxInt;
Result := FileName.SubString(0, I) + Extension;
end;

//XE4 的 ChangeFileExt 函数
function ChangeFileExt(const FileName, Extension: string): string;
var
I: Integer;
begin
I := FileName.LastDelimiter(‘.’ + PathDelim + DriveDelim);
if (I < 0) or (FileName.Chars[I] <> ‘.’) then I := MaxInt;
Result := FileName.SubString(0, I) + Extension;
end;
[/delphi]

正文完
 0
评论(没有评论)