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