概要:ドライブ文字が UNC パスにマップされている場合、_stat()
関数は既存のファイルがないことを示します。
詳細: Windows システムでは、次のような UNC パスがあります。
\\computer\sharename\disk_M\the_subdir\file.txt
そしてそれはこのようにマッピングされます:
net use M: \\computer\sharename\disk_M
その後、file.txt
としてアクセスできM:\the_subdir\file.txt
、エディターでその内容を実際に確認できます。
問題は、プログラムでファイルの存在をテストする必要があることです。私は次の機能を使用します:
bool isfile(const std::string & path)
{
struct _stat stat;
if (_stat(path.c_str(), &stat))
return false; // the call returns -1 with errno ENOENT
return (stat.st_mode & _S_IFREG) != 0;
}
デバッグ中に、関数が次の関数を_stat
呼び出していることがわかりました。FindFirstFile
/* Call Find Match File */
findhandle = FindFirstFile((_TSCHAR *)name, &findbuf);
if ( findhandle == INVALID_HANDLE_VALUE ) {
_TSCHAR * pBuf = NULL;
...そして、ここでファイルを正確に見つけることができません。
何が問題ですか?私は何を間違っていますか?ファイルの存在の検出を強化するにはどうすればよいですか? (コードはローカル管理者によってドライブ マッピングが作成された環境で実行され、構成を変更することはできません。)