现在的位置: 首页 > 菲菲文章 > 学习交流 > 正文

XE3的ChangeFileExt函数存在的问题

2013年05月05日 学习交流 ⁄ 共 1342字 ⁄ 字号 暂无评论 ⁄ 阅读 22,989 次

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函数源代码,大家可以观察它们的不同之处:

//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;

菲菲更名宝贝

菲菲更名宝贝

给我留言

留言无头像?


QR Code Business Card