Überprüfung der Dateiexistenz nach dem Umbenennen eines Ordners gibt einen falschen Wert für die UNC-Freigabe zurück

8

In einem Windows 7 (oder Server) Feld haben wir einen Ordner auf einer UNC Freigabe (Cross Machine UNC, nicht localhost). Wir benennen diesen Ordner um und prüfen dann am neuen Speicherort, ob eine Datei vorhanden ist. Obwohl es vorhanden ist, dauert es fast 5 Sekunden, bis File.Exists True zurückgibt.

Vollständige Repro finden Sie auf Ссылка . Hier ist der Kerncode:

%Vor%

Es scheint also so, als ob die anfängliche Existenzprüfung bewirkt, dass der Existenzwert zwischengespeichert wird, was dieses Scheinverhalten verursacht.

Fragen : Was ist die Erklärung dafür? Was ist der beste Weg, um es zu vermeiden?

HINWEIS : Dieses Problem trat anfänglich bei Verwendung von npm (Node Package Manager) unter Windows auf. Der Code, den ich hier habe, ist ein C # -Port der Repro. Siehe Ссылка für das ursprüngliche Node / npm Problem. Das Ziel ist, einen Weg zu finden, um es anzugehen.

    
David Ebbo 08.03.2012, 08:00
quelle

3 Antworten

10

David, Der Redirector implementiert einen negativen "Datei nicht gefunden" -Cache, der verhindert, dass ein Client einen Server mit nicht gefundenen Dateien überflutet. Die Standard-Cache-Zeit beträgt 5 Sekunden. Sie können jedoch den Registrierungswert FileNotFoundCacheLifetime ändern, um den Cache zu steuern oder ihn zu deaktivieren, indem Sie diesen Wert auf 0 setzen.

Details: Ссылка

    
Todd Carter 08.03.2012, 08:40
quelle
1

Im Netzwerkcode gibt es mehrere Caching-Ebenen. Dies könnte die Zeit, in der die Dateiexistenz endlich angezeigt wird, verlangsamen.

Eine Lösung wäre, keine Dateifreigaben zu verwenden, sondern eine einfache Client / Server-Architektur zu erstellen, bei der der Server die Dateiexistenz vom lokalen Dateisystem zurückgibt. Das sollte die Itemerkennung beschleunigen.

Wenn Sie versuchen, die Datei zu öffnen, auch wenn File.Exists sagt, dass sie noch nicht existiert, sollte sie korrekt geöffnet werden, damit Sie die Server-Existenzinformationen verwenden können. Wenn das nicht funktioniert, können Sie der Server / Client-Architektur einfach eine Download-Option hinzufügen.

    
CodingBarfield 08.03.2012 08:33
quelle
1

Nachdem ich den Cache "Datei nicht gefunden" kannte, konnte ich das Problem umgehen, indem ich ein FileInfo -Objekt verwendete, das eine Refresh() -Methode implementiert. Ihr Code könnte dies stattdessen tun:

%Vor%     
Yogi 14.01.2015 19:01
quelle

Tags und Links