我试图找出如何在某个目录中获取文件夹的名称,但我需要的文件夹名称是随机生成的,但其名称始终以.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
答案 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")