0

概要:ドライブ文字が 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;

...そして、ここでファイルを正確に見つけることができません。

何が問題ですか?私は何を間違っていますか?ファイルの存在の検出を強化するにはどうすればよいですか? (コードはローカル管理者によってドライブ マッピングが作成された環境で実行され、構成を変更することはできません。)

4

0 に答える 0