编辑 - 修改了帖子的标题,使其与问题更相关。
我的文件夹可能包含也可能不包含以" REV"开头的子文件夹。如果有子文件夹以" REV"开头。它们后跟一个用前导零填充的整数值。 (即:REV010或REV003)。
我的目标是:
当我调试代码(下面)时,似乎找不到REV003文件夹(该文件夹肯定存在于路径中)。
查找文件夹时我的LINQ语句出了什么问题?
此外,如果有一个更简单的程序来实现同样的事情 - 我绝对是开放的!谢谢!
int nextRev = 0;
List<int> listOfRevs = new List<int>();
IEnumerable<string> revFolders = Directory.GetDirectories(destDirName, "*REV*", SearchOption.AllDirectories).Where(f => f.StartsWith("REV"));
foreach (var rev in revFolders)
{
Console.WriteLine(int.Parse(rev.Replace("REV", "")));
listOfRevs.Add(int.Parse(rev.Replace("REV", "")));
}
if (listOfRevs.Count > 0)
{
nextRev = listOfRevs.Max();
Console.WriteLine(nextRev);
nextRev++;
}
revFolder = "REV" + nextRev.ToString("000");
Console.WriteLine("New Folder: " + revFolder);
**更新** 感谢NetMage,问题得到解决,但我仍然有一些错误。这是工作代码:
string revf = "";
int nextRev = 0;
List<int> listOfRevs = new List<int>();
IEnumerable<string> revFolders = Directory.GetDirectories(destDirName, "REV*", SearchOption.AllDirectories);
foreach (var rev in revFolders)
{
if (rev.Contains("REV"))
{
revf = rev.Split('\\').Last();
listOfRevs.Add(int.Parse(revf.Replace("REV", "")));
}
}
if (listOfRevs.Count > 0)
{
nextRev = listOfRevs.Max();
nextRev++;
}
revFolder = "REV" + nextRev.ToString("000");
答案 0 :(得分:1)
将目录搜索更改为
IEnumerable<string> revFolders = Directory.GetDirectories(destDirName, "REV*", SearchOption.AllDirectories);
根据此结果,您将更改最大查找代码 - 我将使用LINQ:
var maxREV = Directory.GetDirectories(destDirName, $"REV*", SearchOption.AllDirectories)
.Select(d => Int32.TryParse(Path.GetFileName(d).Substring(3), out int num) ? num : (int?)null)
.Where(n => n.HasValue)
.Select(n => n.Value)
.Max();
var revFolder = "REV" + (maxREV+1).ToString("000");
Console.WriteLine("New Folder: " + revFolder);
我进行了一些错误处理,以跳过“REV”之后没有整数的文件。