我想提取文件fname后缀,例如,设fname是“abcde.dat”,则要提取“.dat”我开始用ExtractFileExt(fname)来实现,但所得结果是“.da”,不是“.dat”,后面总是少一个字母“t”,后来我改用copy(fname,length(fname)-3,4)来实现,但结果也和上面一样!这是为什么?
解决方案 »
- 为什么多线程退出时提示错误类EOSError
- 有人下载了Delphi2005吗?
- 使用TActionList控件,将TAction(ActionList.Action[0].Caption)赋给一string变量时,string变量变成了乱码
- delphi用于CAD开发的基础方面请教.
- 如何得到DBGridEh中某一列所对应的字段名
- 这两个结构一样么!?我为什么收到的数据都不对!急需答案!!
- 请问如何往右键的“新建”菜单中新建一个选项?
- 可变记录的用法?
- 能不能用delphi做一个程序,把网站上的新闻标题拖到程序里,程序能显示新闻标题的内容和url链接!!! 谢谢。。大侠们 !!!
- 300分请各位讨论,如何控制OICQ……
- Intraweb的中文问题如何解决?
- 求助DataSnap客户端insert数据时候错误,说数据类型未知
ExtractFileExt(fname);//一般提取后缀是不会出现你所说的问题的
是不是你赋值给某变量,且该变量已限制了长度 ex: aStr:string[3]; 如果这样,你上面两方法都只能得到三个字符
这个程序我原来在DOS下用bp7开发,当时实模式已不行,改用保护模式也要用大量动态数组。
我移植到windows下用delphi后,不少已不再用动用数组,不知道这会引起什么问题吗?Delphi编译本来应该非常非常快,但我现在常常恰要等好几秒时间才出来!
我的实际源码如下所示:
fnm:=chain.pdb;
ext:=copy(fnm,length(fnm)-3,4);
ch1:=fnm[length(fnm)-3];
showmessage('fnm="'+fnm+'" 1stch="'+ch1+'" copy 4 chrs, ext="'+ext+'"');结果出来 fnm=“chain.pdb”1stch=“.” copy 4 char, ext=“.pd”
如果ext:string ==> .pdb
如果ext:string[3] ==> .pd不知楼主ext 定义有没有限制了长度.
我没有定义长度,所有字符串都用string来定义。实际上,逻辑不会错的,copy语句我频繁使用,就在我这个unit中我查了一下共就有46处,
其他45处都正确,就是在这里加入第46个时出错了!所以感到非常奇怪!我认为,问题只可能是其他因素引起,例如我在前面7楼提到的,数据大,而使用静态数组,
很少使用create、free来编程,我真不知道如何检查这种错误!还有,是否会是病毒,或别的什么因素。
但原来那个地方(File菜单下的一个Open命令)的那个copy语句还是稳定地出错!不可思议透顶了!!
我把程序中原来加入的语句{$A+,B-,D+,E+,F-,G+,I+,L+,N-,P-,Q-,R+,S+,T-,V+,X+,Y+}增加了{$H-}后,引起另一处 ua:=dir+'\libs\static.do.htm';
if fileexists(ua) then
shellExecute(0,'open','iexplore.exe',pchar(ua),nil,SW_SHOWNORMAL)
else
begin
showmessage(ua+' not found.');
exit;
end;这一段语句出错,不过我暂时封了这一段来试,发现原来的问题也不能得到解决。
我后来进一步作了比较:发现出错的地方和后来做试验并成功的地方,除了地点外,差别只有一点,即出错处的fname是从过程外引入的string,而成功处的fname则是直接赋予的常数字符串,但我想这也不可能影响copy语句的执行的!
另外你说的string的short或long,我想也不可能影响copy语句的执行的,因为实际的fname长度都很短。
这是我首先做的检查,就放在copy语句之前的一行,结果证明fname没错。
ext := fname;
Delete(ext, 1, length(ext) - 4);
//...
过程,它是从我原来DOS程序中拷贝来的,其中有一个string3的类型,
string3类型定义为string[3]; 这次我需要提取后缀,就把后缀名放
在原来string3一类中,由于这个过程中变量很多,没有注意string3
与string的差别,从而出现了这一“怪事情”。结贴了,谢谢各位!