我有一些C#代码通过WMI获取有关文件的信息,用于进行以下查询:
SELECT * FROM CIM_DataFile WHERE Drive = 'C:' AND Path = '\\temp\\' AND FileName = 'testemef' AND Extension = 'txt'
如果我使用CIM_LogicalFile
类,我发现我可以查询目录和文件:
SELECT * FROM CIM_LogicalFile WHERE Drive = 'C:' AND Path = '\\temp\\' AND FileName = 'testemef' AND Extension = 'txt'
我设计了一种迂回方式来确定返回的实例是文件还是目录:如果我尝试访问FileSize
属性时遇到异常,则它是一个目录;如果没有,它是一个文件。我不喜欢这种方法,因为除了目录和文件之外还有其他东西。 (命名管道?符号链接?)
不幸的是,CIM_Directory
类中没有任何基本CIM_LogicalFile
类中不存在的唯一属性,所以现在我知道某些东西“不是文件” ,而不是“是一个目录”。
在WMI中是否有一种更加密不透风的方式来确定一个不是文件的pathspec实际上是一个目录,而不是其他一些奇特的实体?
答案 0 :(得分:1)
检查对象的ClassPath.ClassName
属性(WMI系统属性__CLASS
的托管包装器) - 它为文件夹返回 Win32_Directory ,为文件返回 CIM_DataFile