【发布时间】:2018-01-31 06:50:28
【问题描述】:
编辑 - 修改了我的帖子标题,使其与问题更相关。
我的文件夹可能包含也可能不包含以“REV”开头的子文件夹。如果有以“REV”开头的子文件夹,则后面跟一个用前导零填充的整数值。 (即:REV010 或 REV003)。
我的目标是:
- 找到测试文件夹(C:\temp\TEST\REV003)
- 读取文件夹的字符串名称并解析其整数值
- 将整数添加到整数列表中。查找最大整数值
- 增加最大整数值
- 创建以“REV”开头并填充新 int 值的新字符串文件夹名称
当我调试代码时(如下),它似乎找不到 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");
【问题讨论】:
-
您从
GetDirectories返回的信息包括完整路径,因此它们不以“REV”开头。另外,为什么不使用"REV*"作为您的模式并跳过 LINQ?
标签: linq