2009-07-07 4 views
1

Est-il possible que SetCurrentDirectory() expire en cas de ralentissement du réseau empêchant l'accès au répertoire pendant un certain temps? (De l'ordre de 15 à 30 secondes ...?)Délai SetCurrentDirectory

Si oui, le délai d'attente est-il configurable et où peut-il être réglé?

Répondre

1

Le programme suivant qui essaie de SetCurrentDirectory à un répertoire inexistant échoue avec l'erreur de 0x2, qui est ERROR_FILE_NOT_FOUND. Puisque SetCurrentDirectory effectue une validation sur le répertoire, vous pouvez vous attendre à l'expiration d'une connexion réseau lente.

#include <windows.h> 
#include <stdio.h> 

int __cdecl main() 
{ 

    if (SetCurrentDirectory(L"C:\\Invalid") == 0) 
    { 
     printf("0x%x", GetLastError()); 
    } 

    return 0; 
} 
0

Vous pouvez essayer de définir le répertoire en cours dans un fil distinct, et attendre qu'il se termine uniquement pendant une période de temps raisonnable. Étant donné que le paramètre de répertoire actuel est par processus, appeler SetCurrentDirectory à partir d'un autre thread continuerait à effectuer le travail. Vous devez considérer, bien sûr, ce qui se passerait si l'ensemble prenait plus de temps que vous ne le souhaitiez, mais après que le fil principal a été déplacé sur l'ensemble, il est en effet terminé. Cela dit, j'essaie d'éviter d'utiliser un répertoire courant pour des raisons autres que l'ouverture d'une boîte de dialogue de sélection de fichier. Être global du processus, dans un environnement multithread il ne peut pas être approuvé. L'utilisation de chemins complets est meilleure lorsque cela est possible.

+1

"... j'essaie d'éviter d'utiliser un répertoire courant ..." Je suis fortement d'accord avec cela pour plusieurs raisons – SteelBytes