【问题标题】:Using C#, how do I get an object (or array of kv pairs) containing all available properties of a Windows folder or file?使用 C#,如何获取包含 Windows 文件夹或文件的所有可用属性的对象(或 kv 对数组)?
【发布时间】:2014-01-21 15:54:34
【问题描述】:

我希望在事先不知道哪些属性可用的情况下执行以下伪代码之类的操作:

foreach(var property in folder){
     var propertyName = property.Name;
     var propertyValue = property.Value;

     //do other stuff with the values.
}

我也希望能够对文件(而不是文件夹)做同样的事情。

提前致谢。

【问题讨论】:

  • @TimS.--真的吗?社区可以使用的有建设性的东西怎么样。
  • @TimS。我不确定这有什么关系。 OP 正在考虑文件系统上文件/文件夹的属性,而不是反射。
  • 好吧,要么他必须使用文档并找到为这些文件/文件夹对象定义的属性(我们不知道它们是什么,因为他没有说明他正在使用什么) ,或者他将不得不使用反射。所以我认为 TimS 的评论并没有那么离题。
  • 您指的是哪种“属性”?大多数属性只是布尔值(压缩、加密、只读等)

标签: c# windows winforms directory


【解决方案1】:

试试DirectoryInfo.GetFiles(pattern)。它返回一个 FileInfo[] 数组,其中包含一些属性,如名称、文件属性、创建日期……

【讨论】:

    【解决方案2】:

    假设您正在谈论诸如“只读”、“隐藏”等属性的种类,您可以执行以下操作来构建字典:

    var dir = new DirectoryInfo(@"C:\temp");
    var attributes = new Dictionary<string, bool>();
    foreach (int value in Enum.GetValues(typeof (FileAttributes)))
    {
        var attribute = (FileAttributes)value;
        var hasAttribute = dir.Attributes.HasFlag(attribute);
        attributes.Add(attribute.ToString(), hasAttribute);
    }
    

    attributes 字典将包含目录的可能属性,以及指示该属性是否存在的布尔值。

    您可以对文件使用 FileInfo 而不是 DirectoryInfo 来执行完全相同的操作。

    【讨论】:

      【解决方案3】:

      最后,@TimS 建议关注this link 对我来说效果最好。完整代码如下:

              var fileInfo = new FileInfo(folderPath);
              var folderProperties = fileInfo.GetType().GetProperties();
              foreach (var property in folderProperties)
              {
                      var propName = property.Name
                      var propValue = property.GetValue(fileInfo, null);
      
                      //do stuff                                         
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-17
        • 1970-01-01
        • 2021-03-10
        • 2020-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        相关资源
        最近更新 更多