2009-08-12 14 views
1

Ich habe einige C# -Code, um Informationen über eine Datei über WMI zu erhalten, die die folgende Abfrage machen verwendet, um:Ermitteln, ob eine Pfadangabe ein Verzeichnis oder eine Datei (oder etwas anderes) über WMI ist?

SELECT * FROM CIM_DataFile WHERE Drive = 'C:' AND Path = '\\temp\\' AND FileName = 'testemef' AND Extension = 'txt' 

Ich fand heraus, dass ich beide Verzeichnisse und Dateien abfragen kann, wenn ich die CIM_LogicalFile Klasse anstelle :

SELECT * FROM CIM_LogicalFile WHERE Drive = 'C:' AND Path = '\\temp\\' AND FileName = 'testemef' AND Extension = 'txt' 

erdacht ich einen Umweg eine Datei oder ein Verzeichnis, um zu bestimmen, ob die zurückgegebene Instanz ist: wenn ich eine Ausnahme erhalten versuchen, die FileSize Eigenschaft zuzugreifen, ist es ein Verzeichnis; Wenn nicht, ist es eine Datei. Ich mag diese Methode nicht, da es andere Dinge als Verzeichnisse und Dateien geben kann. (Named Pipes? Symlinks?)

Leider gibt es keine einzigartige Eigenschaft in der CIM_Directory Klasse, die in der Basis CIM_LogicalFile Klasse nicht existiert, so jetzt ich zu wissen, dass etwas reduziert werde „nicht eine Datei“ , anstatt "ist ein Verzeichnis".

Gibt es in WMI einen luftdichteren Weg, um festzustellen, dass eine Pfadangabe, bei der es sich nicht um eine Datei handelt, tatsächlich eher ein Verzeichnis als eine andere exotische Einheit ist?

Antwort

1

Überprüfen Sie die ClassPath.ClassName Eigenschaft (verwaltete Wrapper für die WMI-Systemeigenschaft __CLASS) Objekt - es gibt Win32_Directory für Ordner und CIM_DataFile für Dateien.

+0

Das hat den Trick gemacht. Vielen Dank! – JCCyC

Verwandte Themen