我在用FileExists判断本地一个中文文件名时总是返回false,问题出在什么地方。
源码如下,新建的一个测试工程,只有一个buttn
var str: string;
str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
if FileExists(str) then
ShowMessage('ddd');
源码如下,新建的一个测试工程,只有一个buttn
var str: string;
str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
if FileExists(str) then
ShowMessage('ddd');
你可以自己判断一下,没有'\'则加上。
还不行就可能确实没有那个文件了,你把str显示出来看看
var
str: string;
begin
str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
if FileExists(str) then
ShowMessage(str)
else
ShowMessage('Not Exists');
end;
一切运行正常。
str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
//上面的函数返回的路径是带'/'的
showMessage(str); //看看路径是不是你要的再说
if FileExists(str) then
ShowMessage('ddd');
var str: string;
begin
str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
//其中str的值如下
str:= 'C:\Documents and Settings\Administrator\My Documents\最近设计模板.dat';
if FileExists(str) then ShowMessage('ddd');
end;
文件最近设计模板.dat肯定存在的但是没有显示ShowMessage
郁闷ing
if FileExists(str) then ShowMessage('ddd');
改成
if SysUtils.FileExists(str) then ShowMessage('ddd');
如果不行,确定你的"最近设计模板.dat"没被其它程序独占打开.这是FileExists的源码:function FileAge(const FileName: string): Integer;
var
Handle: THandle;
FindData: TWin32FindData;
LocalFileTime: TFileTime;
begin
Handle := FindFirstFile(PChar(FileName), FindData);
if Handle <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(Handle);
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
LongRec(Result).Lo) then Exit;
end;
end;
Result := -1;
end;function FileExists(const FileName: string): Boolean;
begin
Result := FileAge(FileName) <> -1;
end;其实你可以自己改改的,自己做个FileExists更好,不用Delphi判断时间的这个,给人感觉效率不高.
if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
LongRec(Result).Lo) then Exit;
的话,函数体结束,但Result未初始化!可以是任意值~!
ExtractFilePath(Application.ExeName)本身就是带“\”的,
肯定是你的输入的文件路径不对。
要不你设置资源管理器“显示完全路径”(文件选项中),然后从路径栏拷贝路径到你PAS文件中试试看。要不你做下测试:
var str: string;
begin
str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
ShowMesage(str);
if FileExists(str) then ShowMessage('ddd');
end;
C:\Documents and Settings\Administrator\My Documents\
目录下吧。
改为
“C:\Docume~1\Administrator\MyDocu~1\”试一下
最后一个字是否是"/"如果是则不用加,如果不是则要要加上
begin
str:= ExtractFilePath(Application.ExeName) + '最近设计模板.dat';
ShowMesage(str);//看看这里正确吗?
if FileExists(str) then ShowMessage('ddd');
end;你先Message出来看看正确吗?在根据问题分析。
if FileExists('C:\Documents and Settings\Administrator\My Documents\新建文件夹\没有丑陋的女人只有贫穷的女人.JPG') then
Showmessage('1');我试了的,都没错啊。你换台机器试试看