我正在使用 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
。我知道一种解决方法(通过检查找到的文件上的“名称”值,这会给我全名,然后检查全名)。然而,这太疯狂了。
我在这里有几个问题:
为什么短名称的格式会不正确?
有没有办法告诉
FindFirst()
/FindNext()
只搜索长文件名?如果没有,是否有人可以使用替代功能?有一个 DOS 命令可以完全禁用短名称。这样做有什么危险吗?另外,如果我在我们的网络驱动器上禁用此选项,就足够了吗?所有文件操作都在最终用户电脑上进行(我是否必须在个人电脑上禁用短名称?