我有这个方法:
private void CreateAnimatedGif(bool ToCreate)
{
string combined = null;
DirectoryInfo di = new DirectoryInfo(sf);
FileInfo[] fi = di.GetFiles("*.gif");
if (simtest == fi.Length - 1)
{
simtest = 0;
}
if (AnimatedGifFiles.Count == 0)
startTime = DateTime.Now;
if (ToCreate == false)
{
combined = Path.Combine(sf, fi[simtest].FullName);
AnimatedGifFiles.Add(combined);//last_file);
simtest += 1;
}
else
{
if (AnimatedGifFiles.Count > 1)
{
dirs = Directory.GetDirectories(AnimatedGifDirectory);
AnimatedGifDirectoryEvent = "Rain event " + (dirs.Length + 1);
string eventDir = Path.Combine(AnimatedGifDirectory,
AnimatedGifDirectoryEvent);
if (!Directory.Exists(eventDir))
{
Directory.CreateDirectory(eventDir);
}
string outputFile = System.IO.Path.Combine(eventDir,
string.Format(
System.Globalization.CultureInfo.InvariantCulture,
"Event-{0:yyyy-MM-dd-HHmmss}_{1:yyyy-MM-dd-HHmmss}.gif",
startTime, DateTime.Now));
unfreezWrapper1.MakeGIF(AnimatedGifFiles, outputFile, 80, true);
}
AnimatedGifFiles.Clear();
}
}
我正在使用dirs.Length创建带有数字的目录名称,例如,如果没有目录,那么第一个将是:“Rain event 1”,然后下一个将是“Rain event 2”
但如果有一个我有4个目录的例子,例如“Rain event 1”......“Rain event 4” 用户删除目录“Rain event 3”
所以现在我将有3个目录而没有排序:“Rain event 1”,“Rain event 2”,“Rain event 4”
下次dirs.Length将为3,下一个目录将是“Rain event 4”,但它已经存在,因此它将在“Rain event 4”中创建新文件
在这种情况下我需要做的是将“Rain event 4”重命名为“Rain event 3”,下一个目录将是“Rain event 4”
或者,如果我有Rain事件1,Rain事件2,Rain事件3,Rain事件4 我删除了事件2和事件3目录,所以现在应该将Rain事件4重命名为Rain事件2,下一个目录应该是Rain事件3。
我现在想到的问题是如何将目录中的目录重新发送为例如Rain事件4为Rain事件2。
因为我在做:
dirs = Directory.GetDirectories(AnimatedGifDirectory);
每次下一个目录都可以。问题是重命名目录,以防一个或多个目录被删除。
答案 0 :(得分:2)
列出目录,按名称排序,然后遍历目录列表。如果目录索引和目录名称在任何时刻都不匹配,请重命名。这里有一些伪代码
var listDirs = GetDirectories().OrderBy(d => d.Name);
for (var directoryIndex = 1; directoryIndex <= listDirs.Count; directoryIndex++)
{
if (directoryIndex != listDirs[directoryIndex-1].Name) {
Rename(listDirs[directoryIndex-1], directoryIndex);
}
}
请注意,您需要创建具有足够高的零填充的目录,以便&#34; Dir10&#34;不要先于&#34; Dir2&#34;