【发布时间】:2022-01-23 12:19:24
【问题描述】:
我有一个关于 .net 代码的项目,我正在处理文件。
我有很多文件夹,命名约定是这样的:
pdf(1)
pdf(2)
pdf(3)
pdf(4)
pdf(5)
我要做的是当我插入一个新文件夹时,它的新名称应该是(# of folders that exist+ 1)
这段代码做得很好:
string FileDirectory = "C\\test\\myfiles\\";
string FileName = "pdf";
DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(FileDirectory);
FileSystemInfo[] filesAndDirs = hdDirectoryInWhichToSearch.GetFileSystemInfos("*" + FileName + "*");
int i = filesAndDirs.Length;
if (i>0)
{
i++;
Directory.CreateDirectory(FileDirectory + '\\' + FileName+ "(" + i + ")");
}
现在,虽然这段代码可以正常工作,但在这种情况下它不能正常工作。 例如,现有文件是:
pdf(1)
pdf(2)
pdf(5)
pdf(6),
它将尝试创建一个新文件夹,(文件夹数 + i),这将是“pdf(5)”但“pdf(5)”已经存在!
现在我的问题是:如何在这个例子中获得现有文件夹 (6) 的最高“索引”,并创建一个新文件夹 pdf(6)+1 ?
【问题讨论】:
-
循环遍历,拆分出数字部分。或者use regex 如
^.*?\((\d+)\)$来捕获号码。 -
你想要那个文件夹名称的高度索引吗?
-
@ZoyebShaikh,如果可能的话,是的。然后我会比较它并取它的最大值,然后就是“maximumim + 1”。
-
@Llama,你能给我至少一个伪代码吗?
-
遍历目录。如果目录包含
(并以)结尾,则将(之前的目录名称作为“根”。使用Substring、IndexOf、LastIndexOf等将数字部分剪掉。如果该数字高于该目录最后记录的数字,则保存它。如果没有(,则假设为 1 并存储它。遍历所有目录后,您应该拥有每个目录的“根”和最高编号。如果仍然感到困惑,请尝试在纸上弄清楚您将如何做。