问两个简单问题,关于文件和文件夹的。(100分)

  • 主题发起人 主题发起人 liyinwei
  • 开始时间 开始时间
L

liyinwei

Unregistered / Unconfirmed
GUEST, unregistred user!
1.如何获得系统临时文件夹路径的完整字符串?
我用以下的函数获得的目录是 8.3 格式的字符串:E:/SYSTEM~2/TEMPOR~1/TempFile/
function GetTempDir: String;
var
sPath: array[0..MAX_PATH - 1] of char;
begin
GetTempPath(MAX_PATH - 1,sPath);
Result := String(sFile);
end;
而我要的是 Windows 格式的路径:E:/SystemDirectory/Temporary/TempFile/


2.如何知道两个包含了文件绝对路径的字符串是指向同一个文件?
我用 SameFileName 函数,可是不行:
SameFileName('c:/1234567890/1.txt','c:/123456~1/1.txt');

好久没提问了,今天又要麻烦一下大家啦。
 
可以用以下代码来完成短文件名转换为长文件名:
uses
...,shellapi;
Function GetLongFileName(Const FileName : String) : String;
var
aInfo: TSHFileInfo;
begin
if SHGetFileInfo(PChar(FileName),0,aInfo,Sizeof(aInfo),SHGFI_DISPLAYNAME)<>0 then
Result:= String(aInfo.szDisplayName)
else
Result:= FileName;
end;
 
嗯,这方法我会试试的。
 
没办法,自己顶一下吧。
 
有了这个函数还不可以吗?
1、把你的E:/SYSTEM~2/TEMPOR~1/TempFile/用函数转一下就可以了;
2、把你的短文件名转成长文件名然后与你的长文件名比较是否一样不就行了吗。
 
不好意思!
我现在在网吧上的,要回去试一下才知道。
 
GetTempPath这个方法肯定是不行的。

只能转换了吧。
 
谢谢各位!
问题我自己解决了,方法如下:
//这个 API 不知道在 Delphi 提供的单元里有没有封装,反正我找不到,只好自己声明了。
function GetLongPathName(Src, Dest: PChar; cch:DWord): DWord; stdcall;
external 'Kernel32.dll' name 'GetLongPathNameA';

//把短文件名转换为长文件名
procedure ShortPathToLongPath(const AShortName: String): String;
var
sz : array[0..MAX_PATH - 1] of Char;
begin
FillChar(sz, SizeOf(sz), 0);
GetLongPathName(PChar(AShortName), sz, MAX_PATH);
Result:= String(sz);
end;

使用上面的函数就可以解决第一个问题。
第一个问题解决了,第二个就不是问题了,哈哈!
 
多人接受答案了。
 

Similar threads

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