【问题标题】:If DirectoryInfo contain a Directory如果 DirectoryInfo 包含目录
【发布时间】:2012-10-18 10:15:04
【问题描述】:

我正在测试 DirectoryInfo[] 是否包含目录 我的代码在下面

DirectoryInfo[] test = dir.GetDirectories();
if(test.Contains(new DirectoryInfo(dir.FullName +"\\"+ "Test_Folder")))
{
    ContainsTestFolder = true;
}

对我来说,这应该可行,但它似乎并没有在应该的时候返回 true。关于我做错了什么的任何想法。

【问题讨论】:

  • 也许你可以检查像test.Any(d => d.FullName == dir.FullName +"\\"+ "Test_Folder")
  • 值得注意的是,当您可以轻松使用Path.Combine(dir.FullName, "Test_Folder") 时,您不应该使用dir.FullName + "\\" + "Test_Folder",因为这是更合适的方式。

标签: c# contains directoryinfo


【解决方案1】:

您尝试比较所有属性不相等的两个复杂对象,更喜欢只比较它们的FullName 属性。

首选使用谓词使用FirstOrDefault 并比较目录的全名

FirstOrDefault 如果找到则返回一个对象,如果未找到则返回null

DirectoryInfo[] test = dir.GetDirectories();
if (test.FirstOrDefault(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))) != null)
{
   ContainsTestFolder = true;
}

您也可以使用返回boolAny 谓词。

DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
    ContainsTestFolder = true;
}

【讨论】:

  • 如果可以的话,这个答案是非常接近的第二个,我也会给出 2 个赞成票来回答为什么我的代码不起作用。但 Habib 是我看到的第一个使用 .Any 的人,我希望返回一个 bool
  • 不需要获取那个测试文件夹?
【解决方案2】:

使用Enumerable.Any

DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(r => r.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
   ContainsTestFolder = true;
}

您没有得到想要的结果的原因是,包含比较对象引用,而不是它的值。还可以考虑使用 Path.Combine 而不是连接路径。

【讨论】:

    【解决方案3】:

    您无法以这种方式对其进行测试,因为您正在检查 2 个具有相同属性的不同对象是否相等。

    试试

    DirectoryInfo[] test = dir.GetDirectories();
    if (test.Any(x => x.FullName.Equals(dir.FullName +"\\"+ "Test_Folder")))
    {
       ContainsTestFolder = true;
    }
    

    【讨论】:

    • 我找不到Exists函数任何想法?
    • 把我带到那里。我没有引起足够的重视。 Exists 是在 List 类上定义的。在那里,我将其更改为 Array 等价物。
    【解决方案4】:

    您也可以使用 .Contains 如下:

    var path = Directory.GetCurrentDirectory();
    var ctf = Directory.GetDirectories(path).Contains(Path.Combine(path, "Test_Folder"));
    

    这也完全避免了对 DirectoryInfo 的需要

    【讨论】:

      【解决方案5】:

      检查您的目录状态(如果它包含任何子目录)

      if(test.length >0) { // Do you coding here }enter code here
      

      【讨论】:

        猜你喜欢
        • 2019-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多