Przy pisaniu którejś z kolei aplikacji na pewno natkniemy się na problem nadania unikalnej nazwy jakiemuś plikowi. Czasami jest to podyktowane tym, że nie obchodzi nas jaka będzie nazwa takiego pliku, bo ścieżka do niego będzie przechowywana np. w bazie danych, lub nie chcemy aby plik o identycznej nazwie znalazł się jeszcze raz w tym samym katalogu, co oczywiście zaowocuje błędem. Poniżej przedstawiam jak wygenerować taką unikalną nazwę pliku/katalogu. Niektóre z poniższych przykładów nadawają się również idealnie do generowania haseł.

Kiedy stajemy przed wyżej wymienionym problemem pierwszą myślą jaka przychodzi do głowy, jest to aby samemu napisać metodę, która generuje nam unikalny ciąg znaków. W tym wpisie przedstawię jak takie metody mogą wyglądać. Ja wpadłem na dwa sposoby wygenerowania takich ciągów znaków. Pierwszym z nich było skorzystanie z tablicy ASCII. Po małym przeszukiwaniu google, znalazłem jak można to wykorzystać. Poniżej przedstawiam kod takiej metody:

        public static string GenerujLosowaNazwe(int iloscZnakow, bool maleZnaki = false)
        {
            StringBuilder lancuch = new StringBuilder();
            Random rnd = new Random();
            char znak;

            for (int i = 0; i < iloscZnakow; i++)
            {
                znak = Convert.ToChar(Convert.ToInt32((Math.Floor(26 * rnd.NextDouble() + 65))));
                lancuch.Append(znak);
            }
            if (maleZnaki)
            {
                return lancuch.ToString().ToLower();
            }
            else
            {
                return lancuch.ToString();
            }
        }

Jak widzimy jest to prosta metoda, korzystająca z klasy Random do wygenerowania odpowiedniego kodu ASCII. Metoda generuje tylko litery od A do Z, dlatego możemy jeszcze przekazać, aby został zwrócony łańcuch z małych liter.
Oczywiście metoda ta nie jest za doskonała, ponieważ dostaniemy tylko same litery od A do Z, i to tylko w postaci małych lub tylko wielkich liter. Rozwiązaniem jest druga metoda, którą przedstawiam poniżej:

        private static readonly string _znaki = "ABCDEFGHIJKLMNPQRSTWXYZabcdefghijkmnopqrstwxyz0123456789";

        public static string GenereujLosowaNazwe2(int iloscZnakow)
        {
            Random rnd = new Random();
            StringBuilder lancuch = new StringBuilder();
            char[] tablica = _znaki.ToCharArray();
            for (int i = 0; i < iloscZnakow; i++)
            {
                int numer = rnd.Next(0, tablica.Length);
                lancuch.Append(tablica[numer]);
            }
            return lancuch.ToString();
        }

Widać, że ta metoda jest odrobinę prostsza od poprzedniej. Tutaj bazujemy na tablicy znaków z jakich możemy budować nasz łańcuch. Wystarczy w polu prywatnym

_znaki

dodać lub usunąć określony znak.

Jak widać wyżej, napisanie metody, która generuje ciąg znaków, nie jest trudny, ale po co wywarzać już otwarte drzwi? Platforma .NET za nas dostarcza już gotowe metody, które za nas wygenerują nasz losowy ciąg znaków.

Pierwszym z takich losowych ciągów znaków jest GUID (ang. Globally Unique Identifier). Jeden taki klucz przechowuje 32 znaki. Całkowita liczba kluczy jakich może wygenerować GUID to 2128 czyli 340 282 366 920 938 463 463 374 607 431 768 211 456 czyli całkiem dużo.
Sposób wygenerowania GUID'u pod .NET jest bardzo prosty:

string g = Guid.NewGuid().ToString();

Wygenerowany GIUD jest postaci:

030B4A82-1B7C-11CF-9D53-00AA003C9CB6

Czasami znaki myślnika nie są nam potrzebne, dlatego możemy je łatwo usunąć:

 string g = Guid.NewGuid().ToString().Replace("-", "");

Jednak nie zawsze potrzebna jest nam tak długa nazwa pliku. Dlatego platforma dostarcza nam jeszcze jedną metodę, przeznaczoną specjalnie do generowania nazw plików. Metoda ta znajduje się w przestrzeni nazw System.IO. W klasie Path mamy do dyspozycji metodę GetRandomFileName. Generuje ona 8 znakową przypadkową nazwę pliku z 3 literowym przypadkowym rozszerzeniem. Przykład wykorzystania poniżej:

string f = Path.GetRandomFileName();

Wynikiem może być:

2cual2s2.zpm

W klasie Path jest jeszcze jedna metoda, bardzo przydatna do tworzenia plików tymczasowych:

string t = Path.GetTempFileName();

Wynikiem metody jest:

C:\Users\NazwaUżytkownika\AppData\Local\Temp\tmpC7F0.tmp

Metoda ta służy do tworzenia nazwy pliku tymczasowego w katalogu tymczasowym aplikacji systemu. Metoda ta tworzy samą nazwę, nie tworzy pliku na dysku.


Wyświetleń : 1595