2010-02-19 4 views
2

J'ai un petit programme qui vérifie simplement si un fichier spécifié se trouve sur un lecteur réseau spécifié qui n'est pas mappé sur l'ordinateur.
Pour vérifier cela, je mappe temporairement à l'emplacement réseau, vérifiez si le fichier existe et que démapper le lecteur. J'ai maintenant compris que je peux appeler WNetAddConnection2 avec un nom local vide (MSDN: si la chaîne est vide, ou si lpLocalName est NULL, la fonction établit une connexion à la ressource réseau sans rediriger un périphérique local.).
Juste pour montrer le code:Appel de WNetAddConnection2 avec un nom local vide

NETRESOURCE nr; 
nr.dwType = RESOURCETYPE_DISK; 
nr.lpLocalName = NULL; // explicitly set this to NULL 
nr.lpRemoteName = "\\\\computer\\c$"; 
nr.lpProvider = NULL; 

DWORD dwResult = WNetAddConnection2(&nr, cstrPassword, cstrUsername, FALSE); 
if (dwResult != 0) 
{ 
    return false; 
} 

CPath cLocation(cstrFileLocation); 
return cLocation.FileExists() != FALSE; 

Jusqu'à présent si bon code fonctionne très bien. Mais ce que je veux savoir maintenant est s'il y a un problème avec cet appel de WNetAddConnection2? Je ne peux pas appeler WNetCancelConnection, car je n'ai pas de nom local. Est-ce que j'ai maintenant des zombies sur mon ordinateur?
Comment puis-je voir toutes mes connexions réseau sur mon ordinateur? Le mieux serait une commande courte pour l'invite de commande (quelque chose comme NET USE).

Répondre

3

Ok, compris. Je peux appeler le WNetCancelConnection2(nr.lpRemoteName, 0, TRUE); pour démapper le lecteur correctement.

+0

Merci, c'était utile pour moi! – Fred