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 コマンドがあります。これを行うときに危険はありますか?また、ネットワーク ドライブでこのオプションを無効にすれば、それで十分でしょうか? すべてのファイル操作は、エンド ユーザーの PC から行われます (個々の PC で短い名前を無効にする必要がありますか?

4

0 に答える 0