La réponse courte : ils ne sont pas supprimés.
La réponse longue : La gestion Path.GetTempFileName()
appelle la méthode native Win32API GetTempFileName()
comme ceci :
//actual .NET 2.0 decompiled code
// .NET Reflector rocks for looking at plumbing
public static string GetTempFileName()
{
string tempPath = GetTempPath();
new FileIOPermission(FileIOPermissionAccess.Write, tempPath).Demand();
StringBuilder tmpFileName = new StringBuilder(260);
if (Win32Native.GetTempFileName(tempPath, "tmp", 0, tmpFileName) == 0)
{
__Error.WinIOError();
}
return tmpFileName.ToString();
}
La documentation de la méthode native indique :
Les fichiers temporaires dont le nom a été créé par cette fonction ne sont pas automatiquement supprimés. Pour supprimer ces fichiers, appelez DeleteFile.
J'ai trouvé un excellent article intitulé "Ces fichus fichiers temporaires" qui commence par les bases et aborde certains problèmes moins évidents de la gestion des fichiers temporaires, comme.. :
- Comment s'assurer que le fichier est supprimé (même si l'application se plante !) :
FileOption.DeleteOnClose
et laisser le noyau s'en occuper)
- Comment obtenir la bonne politique de mise en cache pour le fichier, afin d'améliorer les performances (indice :
FileAttributes.Temporary
)
- Comment s'assurer que le contenu du fichier reste sécurisé, car :
- le nom du fichier est encore plus prévisible avec la méthode gérée qu'avec la méthode non gérée.
- le fichier temporaire est créé, alors fermé Vous obtenez alors le chemin d'accès au fichier (pour ensuite l'ouvrir à nouveau), ce qui laisse une petite fenêtre d'opportunité à un code/utilisateur malveillant pour détourner le fichier.
L'article montre également une mise en œuvre en C#.