2017-09-10 23 views
1

我有这段代码返回true/false;我想返回true或false,如果给定的目录包含“.exe”

public static bool HasExecutable(string path) 
    { 
     var exts = "*.exe"; 
     if (path.AsDirectory().Exists) return true; 
     if(path.AsDirectory().GetFiles(exts).Any(i => path.Contains(exts))) return true; 
     return false; 
    } 
} 

}

我放出来的是,停止我的程序的错误,我在这里缺少一些逻辑?

+2

什么是错误信息? –

+0

它是 未处理的异常:System.IO.DirectoryNotFoundException:找不到路径'c:\ program files(x86)\ notepad ++'的一部分。 。 –

+0

@Aominè使用i元素时出现错误,无法从fileInfo转换。到字符串 –

回答

1

此行

if (path.AsDirectory().Exists) return true; 

返回true如果该目录本身存在。相反,它应该返回false如果该目录不存在:

if (!path.AsDirectory().Exists) return false; 

的LINQ部分有问题,太:因为路径不允许有通配符Contains通话的道路上永远不会为"*.exe"字符串返回true 。但是,你并不需要在所有的条件,因为GetFiles做了过滤为您提供:

return path.AsDirectory().GetFiles(exts).Any(); 

可以折叠两个条件成一个单一的语句:

return path.AsDirectory().Exists 
    && path.AsDirectory().GetFiles(exts).Any(); 
+0

嗨@dasblinkenlight感谢您的代码,但跟随我的测试用例的变化我返回一个错误的值,而不是真正的调用方法与@“C:\程序文件(x86)\记事本++”/// /预期真实返回false –

+0

@ d.Freeze奇怪的是,对于实现本质上是系统方法的单线调用没有什么特别之处。请检查您的测试用例以确保预期结果是正确的(exe文件必须位于目录本身中,而不是其子目录中的某个子目录中,以便此代码可以正常工作)。 – dasblinkenlight

+0

这里是一个测试用例// if(true.ToString()!= Practice.HasExecutable(@“c:\ program files(x86)\ notepad ++”)ToString()) TestFailures.Add(Tuple.Create (@“c:\ program files(x86)\ notepad ++”。ToString(),true.ToString(),Practice.HasExecutable(@“c:\ program files(x86)\ notepad ++”)。 (); GetFiles(exts,SearchOption.AllDirectories).Any();搜索所有导演,仍然返回错误的值 –

3

您只需枚举目录与模式匹配,并使用Any扩展方法。

public static bool HasExecutable(string path) 
    { 
     var exts = "*.exe"; 
     return Directory.EnumerateFiles(path, exts).Any(); 
    }