0

我正在使用 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。我知道一种解决方法(通过检查找到的文件上的“名称”值,这会给我全名,然后检查全名)。然而,这太疯狂了。

我在这里有几个问题:

  1. 为什么短名称的格式会不正确?

  2. 有没有办法告诉FindFirst()/FindNext()只搜索长文件名?如果没有,是否有人可以使用替代功能?

  3. 有一个 DOS 命令可以完全禁用短名称。这样做有什么危险吗?另外,如果我在我们的网络驱动器上禁用此选项,就足够了吗?所有文件操作都在最终用户电脑上进行(我是否必须在个人电脑上禁用短名称?

4

0 回答 0