Plik już istnieje – czyli zapchany Windows

Czy można „zapchać” system Windows? Okazuje się, że tak – niektóre programy działające w systemie Microsoftu potrzebują tworzyć pliki służące do chwilowego przechowywania danych (tzw. pliki tymczasowe), które historycznie zawsze powstawały w katalogu:

C:\Windows\Temp

w nowszych wersjach systemu Windows powstają natomiast także / lub w katalogu specyficznym dla aktualnie zalogowanego użytkownika, np.:

C:\Users\<tutaj nazwa użytkownika>\AppData\Local\Temp\

Teoretycznie po zakończeniu używania takiego pliku (znajdującego się w jednym z powyższych katalogów) program, który go stworzył, powinien usunąć taki „śmieciowy” plik, jednak czasami z różnych powodów usunięcie się nie udaje.

Może także przydarzyć się, że błędnie napisany program tworzy pliki tymczasowe, w jednym z wymienionych powyżej katalogów bardzo często i/lub bardzo szybko.

W ten sposób, przez niekasowanie lub zbyt szybkie tworzenie, w katalogu przeznaczonym na pliki tymczasowe, znajdzie się bardzo wiele plików. Konkretnie: jeżeli ich liczba przekroczy ok. 65 000 plików, Windows może popaść w kłopoty – a wraz z nim programy działające w systemie.

Dlaczego tak się dzieje?

Pliki w katalogu dla plików tymczasowych tworzone mogą być z użyciem funkcji systemu Windows, która podpowiada jaką nazwę należy nadać kolejnemu plikowi tymczasowemu. Ponieważ – jak wyjaśniłem wcześniej – pliki te tworzone powinny być tylko „na chwilę”, na czas np. wykonywania jakiegoś obliczenia, analizy danych itp., to ich nazwy muszą być nadane w taki sposób, żeby dwa programy nie mogły sobie wzajemnie przeszkodzić (czyli nazwy tych plików muszą być unikatowe, inne dla każdego programu), ale jednocześnie nie muszą mieć formy czytelnej dla przeciętnego użytkownika, bo i tak powinny zostać usunięte, natychmiast po zakończeniu pracy na danych w pliku.

Jeżeli w katalogu przeznaczonym na pliki tymczasowe istnieje już wspomniane 65+ tys. różnych plików, funkcja systemu operacyjnego Windows, której używają programy do dowiedzenia się jaka powinna być nazwa nowego pliku tymczasowego, żeby nie powieliła się z plikiem używanym przez inny program (pamiętajmy, że w każdej chwili, zupełnie niezależnie od siebie, w Windows działać może wiele różnych programów) – głupieje i przestaje poprawnie funkcjonować.

Konkretnie: jeżeli w katalogu na pliki tymczasowe mamy 65+ tys. plików, wywołanie funkcji Windows API o nazwie GetTempFileName spowoduje wystąpienie błędu, z komunikatem „Plik już istnieje”.

Po części przyczyną jest to, że funkcja GetTempFileName ma bardzo długą historię, obecnie istnieją lepsze sposoby obsługi plików tymczasowych, mimo tego jest wciąż używana jako część standardu Windows.

Co na to poradzić?

Jeżeli różne programy w dość losowy sposób, zaczęły zgłaszać błędy i problemy, często z komunikatem typu:

File already exists

lub

Plik już istnieje

należy:

  1. Uruchomić program „Oczyszczanie dysku” i kazać mu usunąć pliki tymczasowe
    Windows - Aplikacja Oczyszczanie Dysku
  2. (Dla bardziej zaawansowanych) Samodzielnie wyczyścić katalogi tymczasowe, wymienione już powyżej, czyli:

    C:\Windows\Temp
    C:\Users\<nazwa użytkownika>\AppData\Local\Temp

Więcej informacji

Jeżeli chcesz dowiedzieć się więcej o żródle i przyczynach tego błędu, zobacz:

Path.GetTempFileName Method (System.IO) | Microsoft Learn

c# – System.IO.IOException: „The file exists” when using System.IO.Path.GetTempFileName() – resolutions? – Stack Overflow

python – Limitations of TEMP directory in Windows? – Stack Overflow

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *