Ejemplo n.º 1
0
        PlanFileRenamings(FileSystemUtils.DirectoryNodeInfo dirInfoTree,
                          string prefix)
        {
            if (dirInfoTree.FileNames.Any() && dirInfoTree.Subdirectories.Any())
            {
                throw new ApplicationException($"Ein Ordner enthält gleichzeitig Dateien und Ordner, was unmöglich macht, zu bestimmen, wo die Dateien eingeordnet werden können. Bitte verlegen Sie sie unter einem Ordner, der nur Dateien enthält. - \"{dirInfoTree.FullPath}\"");
            }

            var renamings = new List <(string fromPath, string toPath)>();

            int fileCount = dirInfoTree.FileNames.Count();

            if (fileCount > 0) // nur Dateien:
            {
                if (fileCount > ushort.MaxValue)
                {
                    throw new ApplicationException($"Die Anzahl von Dateien im Ordner ist schlicht zu groß. - \"{dirInfoTree.FullPath}\" enthält {fileCount} Dateien");
                }

                string   nameRoot = _nameGenerator.GetRandomWord();
                string[] suffixes = NamingUtils.NameGenerator.CreateOrderedListOfPrintedNumbers((ushort)fileCount);

                int idx = 0;
                foreach (string fileName in dirInfoTree.FileNames)
                {
                    string fromPath  = Path.Join(dirInfoTree.FullPath, fileName);
                    string toNewName = $"{prefix}{nameRoot}_{suffixes[idx++]}{Path.GetExtension(fileName)}";
                    renamings.Add((fromPath, toNewName));
                }
            }
            else // nur Ordner:
            {
                int subdirCount = dirInfoTree.Subdirectories.Count();
                if (subdirCount > ushort.MaxValue)
                {
                    throw new ApplicationException($"Die Anzahl von Ordner ist schlicht zu groß. - \"{dirInfoTree.FullPath}\" enthält {subdirCount} Ordner");
                }

                string[] indices = NamingUtils.NameGenerator.CreateOrderedListOfPrintedNumbers((ushort)subdirCount);

                int idx = 0;
                foreach (var subdir in dirInfoTree.Subdirectories)
                {
                    string newPrefix = $"{prefix}{indices[idx++]}_";
                    renamings.AddRange(PlanFileRenamings(subdir, newPrefix));
                }
            }

            return(renamings);
        }
Ejemplo n.º 2
0
        public void MoveAllImagesToFlatOrder(FileSystemUtils.DirectoryNodeInfo dirInfoTree)
        {
            int count = 0;
            var moves = ListFileMovesToExecute(dirInfoTree);

            foreach (var(fromPath, toPath) in moves)
            {
                if (_fileSystemAccess.MoveFile(fromPath, toPath))
                {
                    ++count;
                }
            }

            Console.WriteLine($"{count} aus {moves.Count} konnten erfolgreich verschoben werden.");
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Listet alle Bewegungen von Dateien auf, die ausgeführt werden müssen.
        /// </summary>
        /// <param name="dirInfoTree">
        /// Die Diagramm des Dateisystems unter einem Order,
        /// der alle Dateien enthält, die verschoben werden müssen.</param>
        /// <returns>Eine Liste mit allen auszuführenden Bewegungen.</returns>
        private List <(string from, string to)> ListFileMovesToExecute(FileSystemUtils.DirectoryNodeInfo dirInfoTree)
        {
            var destinationByOrigin = new Dictionary <string, string>(); // hilt bei der Erkennung eines Zusammenstoßes
            var renamings           = PlanFileRenamings(dirInfoTree, "");
            var moves = new List <(string from, string to)>(renamings.Count);

            foreach ((string fromPath, string toNewName) in renamings)
            {
                if (!destinationByOrigin.TryAdd(toNewName, fromPath))
                {
                    string coincidentFile = destinationByOrigin[toNewName];
                    throw new ApplicationException($"Unerwarteter Fehler: zwei Dateien müssen zum gleichen Namen umbennant werden! - {fromPath} und {coincidentFile} werden {toNewName}");
                }

                moves.Add((fromPath, Path.Join(dirInfoTree.FullPath, toNewName)));
            }

            return(moves);
        }