如何通过名称的一部分获取目录中的文件夹

时间:2015-03-20 13:24:28

标签: c# visual-studio-2013

我试图找出如何在某个目录中获取文件夹的名称,但我需要的文件夹名称是随机生成的,但其名称始终以.user结尾(例如文件夹可能是1245fa .user或WRf5.user)。 我怎么能这样做?

以下是我如何获取名称永不改变的文件夹

string slug = @"%userprofile%\AppData\Roaming\MyApp\Profiles\constantuser\";
string filePath = Environment.ExpandEnvironmentVariables(slug);
string targetPath = @"C:\ErrorLog";
string sourceFile = System.IO.Path.Combine(filePath, p);
string destFile = System.IO.Path.Combine(targetPath, p);

在这种情况下,我需要constantuser作为以.user

结尾的文件夹

2 个答案:

答案 0 :(得分:2)

您可以在Where()上尝试First()(或Single()Directory.EnumerateDirectories(),...)LINQ扩展程序。

假设以下代码(请注意以" parent"目录结尾的slug):

var slug = @"%userprofile%\AppData\Roaming\MyApp\Profiles\";
var parentDirectoy = Environment.ExpandEnvironmentVariables(slug);

如果您确定 ,那么恰好有一个目录符合该标准,您可以这样做:

var directoryName = Directory.EnumerateDirectories(parentDirectory)
                              .SingleOrDefault(dir => dir.EndsWith(".user"));
if (directoryName != null) 
{
    // do your thing
}

如果您使用Single而不是SingleOrDefault,则缺少目录或多个目录将导致异常,而不是返回null

如果可能有多个目录,您可以改为:

var directoryNames = Directory.EnumerateDirectories(parentDirectory)
                              .Where(dir => dir.EndsWith(".user"));
foreach (var directoryName in directoryNames) 
{
    // do your thing
}

如果没有找到匹配或多次,循环可以运行零次;每场比赛一场。

答案 1 :(得分:0)

System.IO.Directory.GetDirectories(filePath, "*.user")