2015-03-23 4 views
9

Also ich Unit-Test versuche/Integration meinen Code verantwortlich testen Sie ein Verzeichnis für die gemeinsame Nutzung.Directory.Exists halten Verzeichnis-Handle für einige Sekunden

Also ich meine Freigabe-Laufwerk erstellen und dann überprüfe ich, ob das Verzeichnis existiert. Zuerst lokal und dann über den Freigabenamen.

Danach möchte ich natürlich nach mir selbst aufräumen, indem ich das gerade erstellte Verzeichnis entferne. Dies funktioniert jedoch nicht, weil "... es von einem anderen Prozess verwendet wird".

Nach einigen Experimenten habe ich festgestellt, dass wenn ich meine zweite Assert entferne es wieder funktioniert. Mache ich etwas falsch? Oh, und ich habe auch bemerkt, dass es funktioniert, wenn ich 30 Sekunden schlafen, bevor ich das Verzeichnis entferne. WTF?

EDIT: Ich habe gerade dieses Problem überarbeitet und versucht, wie die Leute in den Kommentaren vorgeschlagen haben, den Ordner explizit zuerst zu teilen. Das war's. Lief wie am Schnürchen.

+0

einen Blick auf diese alternative Art und Weise, um zu überprüfen, ob ein Verzeichnis existieren http://stackoverflow.com/questions/1395205/better -Wege-to-Check-if-Pfad-is-a-Datei-oder-a-Verzeichnis – MethodMan

+0

Einfache Vermutung: es ist nicht die Schuld der 'Directory.Exists', es ist die SMB-Verbindung, die nicht sofort geschlossen wird. –

+0

Sie verwenden eine Netzwerkverbindung mit dem Antrieb zu sehen, wenn es vorhanden ist - die Verbindung hat, um Zeit, bevor er die Sperre freigibt. Wenn Sie die Verbindung explizit herstellen, können Sie sie explizit schließen. – Hogan

Antwort

2

Wie von @DWright angefordert, beantworte ich meine eigene Frage, da niemand sonst dies getan hat, zu Dokumentationszwecken und zur Klarheit, wenn andere Leute diesen Beitrag finden.

Mein Problem wurde durch explizit gelöst Sperren von den Ordner vor dem Entfernen:

var share = String.Format("Win32_Share.Name='{0}'", shareName); 
var managementObj = new ManagementObject(share); 
managementObj.InvokeMethod("Delete", null, null); 
+0

Können Sie den Code dafür hinzufügen? –

Verwandte Themen