从短文件名取得Windows长文件名的问题(20分)

  • 主题发起人 主题发起人 Alphazw
  • 开始时间 开始时间
A

Alphazw

Unregistered / Unconfirmed
GUEST, unregistred user!
  我在《程序员《大本营》中查出可以用以下代码来完成短文件名转换为长文件名:<br>uses<br>&nbsp; &nbsp;...,shellapi;<br>Function GetLongFileName(Const FileName : String) : String; &nbsp;<br>var &nbsp;<br>&nbsp; aInfo: TSHFileInfo; &nbsp;<br>begin &nbsp;<br>&nbsp; if SHGetFileInfo(PChar(FileName),0,aInfo,Sizeof(aInfo),SHGFI_DISPLAYNAME)&lt;&gt;0 then &nbsp;<br>&nbsp; &nbsp;Result:= String(aInfo.szDisplayName) &nbsp;<br>&nbsp; &nbsp;else &nbsp;<br>&nbsp; &nbsp;Result:= FileName; &nbsp;<br>end;<br>  可是当我调用的时候:<br>edit1.text:=GetLongFileName('C:/PCCF-0~1.DAT');<br>只能够得到:PCCF-0~1,这是怎么回事,程序也没有报错,而且C:/PCCF-0~1.DAT这个文件也存在<br>请知道的朋友发帖告诉我,我将感激不尽。20分送上!
 
代码应该没问题,你不妨到Windows的资源管理器看看,这个文件在Windows下的文件名是不是<br>叫PCCf-0~1.DAT,还是另有其名,如果是叫PCCF-0~1.DAT,那么程序没有问题。
 
那个文件确实存在,什么都没有错,就是返回的结果为什么不是长文件名呢?
 
我不是说它不存在,而是它在Windows资源管理器中的名称就是PCCF-0~1.Dat,这样的话,<br>Windows自然认为它的全名就是PCCF-0~1.Dat,而不是你想要的长文件名。<br>如果你的文件是WindowsLongFileName.Dat,那么它在Dos 下的显示就是Windows~1.Dat,<br>但在资源管理器中就是长文件名的,这样的话你就可以用上面的程序直接从Windows~1.Dat<br>取得是WindowsLongFileName.Dat,如果它本名就是Windows~1.dat,那么无论怎样取,它的文件名都是<br>Windows~1.Dat.<br>
 
Thank you for your answers!<br>Thank you very much!<br>My Email:alpha@kzinfo.net
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
390
import
I
后退
顶部