2010-11-23 4 views
2

Ich habe eine lustige Situation. Ich sitze auf einem Computer, auf dem sich ein freigegebener Ordner befindet, sagen wir "My_Folder". Also kann ich mit der Adresse "\ My_Box \ My_Folder" darauf zugreifen.Get lokalen Pfad von Netzwerkpfad

Wenn ich jetzt ein kleines Werkzeug in C# schreibe, kann ich das "\ My_Box \ My_Folder" in "C: \ My_Folder" umwandeln, was seine physische Position ist.

Das komische Ding ist, dass ich nicht weiß, wie man den physischen Standort von "My_Box \ My_Folder" ohne mein Programm findet ... Und es ist tatsächlich eines der Probleme meines Freundes.

Also, wenn jemand weiß, wie man den lokalen Pfad von einem Netzwerkpfad mit einigen einfachen grundlegenden Windows-Befehlen/Operationen (entweder Winxp, 2000, Vista, 7, ...) findet, lass es mich wissen.

Danke, Pete.

Antwort

2

Wenn Sie nur ein Befehlszeilentool benötigen, das diese Informationen bereitstellt, können Sie einfach den Befehl net share verwenden, der in Windows integriert ist.

Wenn Sie es programmgesteuert tun müssen, können Sie die Funktion NetShareGetInfo verwenden. Das folgende Beispiel zeigt, wie es verwendet wird, um den Pfad für \\localhost\share in C++ abzufragen.

#include <windows.h> 
#include <lm.h> 
#pragma comment (lib, "netapi32.lib") 

#include <iostream> 
using namespace std; 

int main() 
{ 
    BYTE * buffer = nullptr; 

    auto error = NetShareGetInfo(nullptr, // local computer 
           L"share", 
           2, // level 
           &buffer); 

    if (ERROR_SUCCESS == error) 
    { 
     auto info = reinterpret_cast<SHARE_INFO_2 *>(buffer); 

     wcout << info->shi2_path << endl; 
    } 

    if (buffer) 
    { 
     NetApiBufferFree(buffer); 
    } 
} 

Ich würde den Puffer in einer Klasse wickeln und NetApiBufferFree von seinem destructor nennen, aber das ist bei Ihnen.