我需要创建数量增加的备份文件夹。但是如果它们存在,我需要跳过编号中的空白,并使下一个文件夹名称ONE高于编号最大的文件夹。例如,如果我有:
c:\backup\data.1 c:\backup\data.2 c:\backup\data.4 c:\backup\data.5
我需要下一个文件夹
c:\backup\data.6
下面的代码有效,但感觉非常笨重。有没有更好的方法来执行此操作并仍然保留在.NET 2.0 ?
static void Main(string[] args)
{
string backupPath = @"C:\Backup\";
string[] folders = Directory.GetDirectories(backupPath);
int count = folders.Length;
List<int> endsWith = new List<int>();
if (count == 0)
{
Directory.CreateDirectory(@"C:\Backup\Data.1");
}
else
{
foreach (var item in folders)
{
//int lastPartOfFolderName;
int lastDotPosition = item.LastIndexOf('.');
try
{
int lastPartOfFolderName = Convert.ToInt16(item.Substring(lastDotPosition + 1));
endsWith.Add(lastPartOfFolderName);
}
catch (Exception)
{
// Just ignore any non numeric folder endings
}
}
}
endsWith.Sort();
int nextFolderNumber = endsWith[endsWith.Count - 1];
nextFolderNumber++;
Directory.CreateDirectory(@"C:\Backup\Data." + nextFolderNumber.ToString());
}
由于
答案 0 :(得分:3)
这是一个略有不同的版本,但基本上做同样的事情。找到具有最大后缀的文件夹,然后为下一个文件夹添加一个。
static void Main(string[] args)
{
string backupPath = @"C:\Backup\";
string[] folders = Directory.GetDirectories(backupPath);
Int16 max = 0;
foreach (var item in folders)
{
//int lastPartOfFolderName;
int lastDotPosition = item.LastIndexOf('.');
if (lastDotPosition > -1 && !item.EndsWith("."))
{
Int16 folderNumber;
if (Int16.TryParse(item.Substring(lastDotPosition + 1), out folderNumber))
{
if (folderNumber > max)
{
max = folderNumber;
}
}
}
}
max++;
Directory.CreateDirectory(@"C:\Backup\Data." + max);
}
我只是稍微“清理”了你的代码以删除空的catch和其他列表/排序。
答案 1 :(得分:2)
你是对的;这有点笨重。它依赖于以数字顺序提供文件夹名称的操作系统,这是我一直很谨慎的事情,因为我无法控制操作系统的新版本将会做什么。
最好解析文件夹名称,获取所有数字的列表,然后明确找到最大值。
然后当你添加1时,你保证你现在已经创建了新的最高值。