我在Borland C ++ Builder 6中编码。在我的几个应用程序中,我使用以下函数在我们的网络上查找文件:
String sRootDir="N:\\";
String sClmNbr="748000";
TSearchRec fnd1;
if (FindFirst(sRootDir+sClmNbr+"*.PDF",faAnyFile,fnd1)==0)
{
lbClmCpy->Lines->Add(fnd1.Name);
while (FindNext(fnd1)==0)
{lbClmCpy->Lines->Add(fnd1.Name);}
FindClose(fnd1);
}
这是该函数的淡化版本,但您可以看到我想要完成的任务。我尝试使用N:
掩码在748000*.*
上搜索任何文件。
但是,该函数返回与掩码不匹配的文件。在做了一些挖掘后,我发现它与文件的8.3短名称有关。无论出于何种原因,文件的短名称都是完全错误的。例如,748123_20161110.pdf
应该看起来像748123~1.pdf
,而不是显示748AE4~1.PDF
。我知道一个解决方法(通过检查找到的文件的'Name'值,这将给我全名,然后检查全名)。然而,这很疯狂。
我在这里有几个问题:
为什么短名称格式不正确?
有没有办法告诉FindFirst()
/ FindNext()
只搜索长文件名?如果没有,是否有人有可以使用的替代功能?
有一个DOS命令可以完全禁用短名称。这样做有危险吗?此外,如果我在我们的网络驱动器上禁用此选项,这还够吗?所有的文件操作都是从最终用户的PC上进行的(我是否必须在个人电脑上禁用短名称?