Menu Górne

Temp files

Pliki tymczasowe w C# to teoretycznie trywialne zadanie. Teoretycznie :). Do tego celu mamy dwie często używane funkcje czyli System.IO.Path.GetTempPath oraz System.IO.Path.GetTempFileName. Funkcje te są czasami mylone szczególnie przez początkujących programistów. Zdarzyło mi się nawet na forum tematycznym przeczytać że to „chyba to samo…”. Nie! One nie robią tego samego! Choć wyglądają podobnie ich działanie jest bardzo różne.

System.IO.Path.GetTempPath

Jak możemy przeczytać na stronach MSDN:  System.IO.Path.GetTempPath – „Returns the path of the current user’s temporary folder.” GetTempPath zwraca jedynie aktualny folder tymczasowy użytkownika. Jeżeli teraz pomyślałeś że „folder plików tymczasowych to przecież C:\Windows\Temp” to musze powiedzieć, że jesteś w błędzie. Te czasy już minęły. Teraz folder tymczasowy to na przykład: C:\Users\<NazwaUzytkownika>\AppData\Local\Temp”. Tak przy okazji, czy zastanawiałeś się kiedyś jak zmienić ścieżkę dla folderu tymczasowego? Znajdziemy ją we właściwościach systemu, na zakładce zaawansowane. Ok!, koniec OT, wracamy do funkcji GetTempPath. A więc najważniejsza informacja: funkcja ta ZWRACA ŚCIEŻKĘ DO FOLDERU TYMCZASOWEGO. Aż tyle i tylko tyle…

System.IO.Path.GetTempFileName

Druga z omawianych przez nas funkcji to System.IO.Path.GetTempFileName – „Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file.” (MSDN). Jak możemy przeczytać funkcja ta:

– generuje tymczasową nazwę pliku

– tworzy plik (0 bajtowy) wykorzystując wcześniej wygenerowaną nazwę oraz ścieżkę do folderu plików tymczasowych (dokładnie taką samą jaką zwraca funkcja GetTempPath)

– zwraca w postaci string ścieżkę do wygenerowanego pliku.

Podczas wywołania GetTempFileName nie ma potrzeby sprawdzania poprawności ścieżki, ponieważ możemy mieć pewność, że plik istnieje.

Jak widzisz pomiędzy funkcjami GetTempPath a GetTempFileName istnieje fundametalna różnica.

Weźmy sobie na przykład prostą konsolową aplikację:

using System;

namespace TempFolderApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(System.IO.Path.GetTempPath());
            Console.WriteLine(System.IO.Path.GetTempFileName());
            Console.ReadLine();
        }
    }
}

Która zwróci (w moim przypadku):

console view

 

 

 

 

Widać tutaj wcześniej wspomnianą przeze mnie analogię: mój folder plików tymczasowych to „C:\Users\Lucas\AppData\Local\Temp”. Dokładnie taką wartość zwraca funkcja GetTempPath. GetTempFileName natomiast zwraca ścieżkę do pliku znajdującego się w wyżej wymienionym folderze. TmpD991.tmp to plik utworzony przez wspomnianą funkcję. Plik ma 0 bajtów i jest od teraz do naszej dyspozycji.

To by było na tyle w temacie plików tymczasowych, temat lekki ale jak się okazuje czasami potrzebny do omówienia.

Żródła:

GetTempPath – MSDN

GetTempFileName – MSDN

O autorze

Niepoprawny optymista. 100 pomysłów na sekundę, wielbiciel nowych technologii, nie tylko z rodziny .Net. Często nosi przy sobie jabłko, takie nadgryzione... ;)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz używać znaczników języka HTML i ich atrybutów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Zamknij