1

数が増えるバックアップ フォルダを作成する必要があります。ただし、番号付けのギャップが存在する場合はスキップし、次のフォルダー名を最大番号のフォルダーよりも 1 つ大きくする必要があります。たとえば、私が持っている場合:

c:\バックアップ\data.1
c:\バックアップ\data.2
c:\バックアップ\data.4
c:\バックアップ\data.5

次のフォルダが必要です

c:\バックアップ\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());
    }

ありがとう

4

2 に答える 2

3

これは少し異なるバージョンですが、基本的に同じことを行います。max サフィックスが付いたフォルダーを見つけて、次のフォルダー用に 1 つ追加します。

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

空のキャッチと追加のリスト/ソートを削除するために、コードを少し「クリーンアップ」しました。

于 2012-08-29T00:56:31.957 に答える
2

あなたは正しいです; これは少し不格好です。これは、OS の新しいバージョンが何をするかを制御できないため、私が常に警戒しているものである番号順にフォルダ名を提供する OS に依存しています。

フォルダ名を解析し、すべての番号のリストを取得してから、明示的に最大値を見つける方がよいでしょう。

次に 1 を追加すると、新しい最高値を作成したことが保証されます。

于 2012-08-29T00:50:00.097 に答える