internal static IMediaCopier CreateMediaCopier(string type, FileInfo fInfo)
        {
            IMediaCopier mediaCopier = null;

            switch (type)
            {
            case ".JPG":
                mediaCopier = new ImageCopier(fInfo);
                break;

            case ".MP4":
            case ".MOV":
                mediaCopier = new MovieCopier(fInfo);
                break;

            case ".NEF":
                mediaCopier = new BitmapCopier(fInfo);
                break;

            default:
                break;
            }

            return(mediaCopier);
        }
Exemple #2
0
        static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("     Syntax :: CopyPictures Quelle Ziel [Dateiformat [Dateiformat]...] [Optionen]");
                Console.WriteLine("     Quelle :: Quellverzeichnis (Laufwerk:\\Pfad");
                Console.WriteLine("       Ziel :: Zielverzeichnis (Laufwerk:\\Pfad");
                Console.WriteLine("Dateiformat :: z.B. *.JPG, mehrere durch ',' getrennt, keine Leerzeichen.");
                Console.WriteLine("\nOptionen:");
                Console.WriteLine("/y oder /m oder /d :: Je nach Auswahl werden die Dateien im Zielverzeichnis sortiert:");
                Console.WriteLine("                /y :: nach Jahr");
                Console.WriteLine("                /m :: nach Jahr\\Monat");
                Console.WriteLine("                /d :: nach Jahr\\Monat\\Tag");
                Console.WriteLine("\nBeispiel:");
                Console.WriteLine("\nG:\\DCIM F:\\Digi-Fotos\\Emelie *.JPG,*.MOV,*.NEF [/y/m/d]");
                return;
            }

            string[] splitCharsFileExtensions = new string[] { "," };

            DirectoryInfo dInfo = new DirectoryInfo(args[0]);

            string[] searchPatterns = args[2].Split(splitCharsFileExtensions, StringSplitOptions.RemoveEmptyEntries);

            string pathFlag = "";

            if (args.Length == 4)
            {
                pathFlag = args[3];
            }

            int counter = 0;

            foreach (FileInfo fInfo in searchPatterns.SelectMany(searchPattern => dInfo.EnumerateFiles(searchPattern, SearchOption.AllDirectories)))
            {
                try
                {
                    if ((counter % 100) == 0)
                    {
                        Console.WriteLine(counter);
                    }

                    DateTime     parsedDate;
                    IMediaCopier mediaCopier = MediaCopierFactory.CreateMediaCopier(fInfo.Extension.ToUpper(), fInfo);

                    if (mediaCopier == null)
                    {
                        Console.WriteLine(String.Format("{0}: Für den Dateityp {1} ist kein Kopierer vorhanden.",
                                                        fInfo.Name,
                                                        fInfo.Extension));
                        continue;
                    }

                    parsedDate = mediaCopier.GetDate();

                    string year    = parsedDate.Year.ToString();
                    string month   = parsedDate.ToString("MM");
                    string day     = parsedDate.ToString("dd");
                    string hour    = parsedDate.Hour.ToString();
                    string minutes = parsedDate.Minute.ToString();

                    string        fDate     = year + month + day + hour + minutes;
                    StringBuilder targetDir = new StringBuilder(args[1]);

                    targetDir.Append("\\");
                    targetDir.Append(year);
                    targetDir.Append("\\");
                    targetDir.Append(month);
                    targetDir.Append("\\");
                    targetDir.Append(day);

                    int removals = 0;
                    switch (pathFlag)
                    {
                    case "/m":
                        removals = 3;
                        break;

                    case "/y":
                        removals = 6;
                        break;

                    case "":
                        removals = 11;
                        break;
                    }

                    targetDir = targetDir.Remove(targetDir.Length - removals, removals);

                    string[] splitCharsFileName = new string[] { "." };
                    string[] fileNameParts      = fInfo.Name.Split(splitCharsFileName, StringSplitOptions.RemoveEmptyEntries);

                    string newName = String.Join(
                        ".",
                        fileNameParts.FirstOrDefault <string>(),
                        fDate,
                        fileNameParts.LastOrDefault <string>());

                    string targetFile = targetDir + "\\" + newName;

                    mediaCopier.CopyMedia(targetDir.ToString(), targetFile);
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.Message);
                    Console.WriteLine(exc.InnerException);
                }

                counter += 1;
            }
            Console.WriteLine("Fertig");
            Console.ReadKey();
        }