Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果用户删除了其中一个目录,我如何对硬盘上的目录进行排序?_C#_.net_Winforms - Fatal编程技术网

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

C# 如果用户删除了其中一个目录,我如何对硬盘上的目录进行排序?,c#,.net,winforms,C#,.net,Winforms,我有这个方法: 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 (An

我有这个方法:

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事件1”,然后下一个将是“Rain事件2”

但是如果有一种情况,我有4个目录,例如“RainEvent1”…“RainEvent4” 用户删除目录“Rain event 3”

现在我有3个目录,没有排序:“雨事件1”,“雨事件2”,“雨事件4”

下一次dirs.Length将是3,下一个目录将是“Rain event 4”,但它已经存在,因此它将在“Rain event 4”中创建新文件

在这种情况下,我需要它将“Rain event 4”重命名为“Rain event 3”,下一个目录将是“Rain event 4”

或者如果我有雨事件1,雨事件2,雨事件3,雨事件4 我删除了事件2和事件3目录,所以现在雨水事件4应该重命名为雨水事件2,下一个目录应该是雨水事件3

我现在想的问题是如何将目录按照顺序重新命名,例如RainEvent4到RainEvent2

因为我在做:

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);
    }
}
var listDirs=GetDirectories().OrderBy(d=>d.Name);

对于(var directoryIndex=1;directoryIndex),另一种方法是使用变量rainEventIndex并使用它重命名AnimatedGifDirectoryEvent=“Rain event”+rainEventIndex。将此变量保存到txt文件中。每次应用程序启动时,都从该文件加载该变量。当程序关闭时,将新值写入该文件。