如果用户删除了其中一个目录,我如何对硬盘上的目录进行排序

本文关键字:硬盘 排序 用户 如果 一个 删除 | 更新日期: 2023-09-27 18:27:49

我有这个方法:

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。用数字创建目录名称的长度,例如,如果没有目录,那么第一个将是:"Rain event 1",然后下一个将是"Rain event 2"

但是,如果有一个场景,我有4个目录,例如"Rain event 1"。。。。。"降雨事件4"并且用户删除目录"Rain event 3"

所以现在我有3个目录,没有排序:"Rain event 1","Rain event 2","下雨事件4"

下一次dirs。长度将是3,下一个目录将是"Rain event 4",但它已经存在,因此它将在"Rain vent 4"中创建新文件

在这种情况下,我需要它做的是将"Rain event 4"重命名为"Rain vent 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);

每次下一个目录都可以。问题是重命名目录,以防一个或多个目录被删除。

如果用户删除了其中一个目录,我如何对硬盘上的目录进行排序

列出目录,按名称排序,然后迭代目录列表。如果在任何时候目录索引和目录名不匹配,请重命名它

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);
    }
}

请注意,您需要创建具有足够高的零填充的目录,以便"Dir10"不在"Dir2"之前