Random File Name: come disordinare una cartella!

Contenuti

Venerdì sera, World of Warcraft a tutto schermo sul mio portatile, il mio Shaman Healer nel pieno di un raid ed il telefono che mi squilla. Rispondo e mi sento chiedere la seguente cosa: **"hai un programmino per rendere RANDOM il nome dei file in una cartella? Se non ricordo male mi dicevi di averlo fatto per te"**. E' vero, il programma lo avevo fatto per me in quanto il mio lettore mp3 aveva un random inutile e così rinominavo tutti i file in maniera assurda. Purtroppo quel programma è andato perso in una formattazione. Preso dai sensi di colpa di avere detto "no e sto anche giocando" ho chiuso WoW ed ho aperto VS2019.

*Randomize File Name by Folder* (cs) ```

private void RandomizeFileNames(string folderSource, string folderOutput, string[] renameOnlyExt) {

        string[] files = (from f in Directory.GetFiles(folderSource)
                          select f).ToArray();

        renameOnlyExt = renameOnlyExt
            .Select(x => x.ToLower())
            .ToArray();

        if (Directory.Exists(folderOutput) == false)
        {
            Directory.CreateDirectory(folderOutput);
        }

        foreach (var item in files)
        {
            var itemLower = item.ToLower();

            FileInfo fi = new FileInfo(item);

            if (Array.IndexOf(renameOnlyExt, fi.Extension) == -1)
            {
                continue;
            }

            string newFileName = $"{Guid.NewGuid()}";

            using (var md5 = MD5.Create())
            {
                using (var stream = File.OpenRead(itemLower))
                {
                    var bytes = md5.ComputeHash(stream);
                    newFileName = $"{new Guid(bytes)}".Replace("-", string.Empty);
                }
            }

            string fileDestination = Path.Combine(folderOutput, $"{newFileName}{fi.Extension}");

            if(File.Exists(fileDestination)){
                File.Delete(fileDestination);
            }

            File.Copy(itemLower, fileDestination);

        }

    }
1
2
3
4

<p>Come potete notare sono veramente pochissime le righe di codice per creare in una cartella destinazione (quindi SENZA modificare i file originali) una copia di tutto dal "nome random" (ma non troppo) per rendere la cartella disordinata rispetto l'originale. </p><p>**Attenzione**: nel caso di più file uguali nella cartella sorgente verrà messo un solo file. E' utile? Quando ho scritto quelle righe di codice (lontano 2017) lo era perché da N file uguali distribuiti in più cartelle di input dovevo mantenere un solo file di uscita. Se volete una corrispondenza uno ad uno, vi basterà commentare il blocco "**using (var md5 = MD5.Create())**" in modo da avere per ogni file un nuovo file col nome NewGuid().</p>