3

C ++では、マウントされたドライブの場所を取得するにはどうすればよいですか?たとえば、ドライブs:をc:\ tempにマウントした場合(コマンドラインでsubstを使用) "subst c:\ temp s:" "s:"を渡して "c:\temp"を取得するにはどうすればよいですか。

また、ネットワークドライブでどのように実行できるか知りたいです。(s:が "\ MyComputer \ Hello"にマウントされている場合、 "\ MyComputer \ Hello"を取得してから、そこから "c:\ Hello"を取得します)

とても簡単な質問かもしれませんが、それに関する情報が見つかりませんでした。

ありがとう、

アダム

4

3 に答える 3

1

SUBST を使用したことがある場合、必要な API は QueryDosDevice です。DefineDosDevice を使用して自分で SUBST することができます。

于 2008-12-30T15:51:37.193 に答える
0

マウントされたネットワーク共有のパスを見つけるには、WNet API を使用する必要があります。

wstring ConvertToUNC(wstring sPath)
{
    WCHAR temp;
    UNIVERSAL_NAME_INFO * puni = NULL;
    DWORD bufsize = 0;
    wstring sRet = sPath;
    //Call WNetGetUniversalName using UNIVERSAL_NAME_INFO_LEVEL option
    if (WNetGetUniversalName(sPath.c_str(),
        UNIVERSAL_NAME_INFO_LEVEL,
        (LPVOID) &temp,
        &bufsize) == ERROR_MORE_DATA)
    {
        // now we have the size required to hold the UNC path
        WCHAR * buf = new WCHAR[bufsize+1];
        puni = (UNIVERSAL_NAME_INFO *)buf;
        if (WNetGetUniversalName(sPath.c_str(),
            UNIVERSAL_NAME_INFO_LEVEL,
            (LPVOID) puni,
            &bufsize) == NO_ERROR)
        {
            sRet = wstring(puni->lpUniversalName);
        }
        delete [] buf;
    }

    return sRet;;
} 
于 2008-12-30T14:45:00.637 に答える
0

おそらくGetVolumeInformation関数を使用できます。ドキュメントから:

シンボリック リンクの動作

パスがシンボリック リンクを指している場合、関数はターゲットのボリューム情報を返します。

ただし、自分でテストしていません。

于 2008-12-30T13:05:12.773 に答える