Je dois générer un fichier temporaire unique avec une extension .csv.
Ce que je fais en ce moment est
string filename = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv");
Toutefois, cela ne garantit pas que mon fichier .csv sera unique.
Je sais que les chances d'avoir une collision sont très faibles (surtout si l'on considère que je ne supprime pas les fichiers .tmp), mais ce code ne me semble pas bon.
Bien sûr, je pourrais générer manuellement des noms de fichiers aléatoires jusqu'à ce que je trouve un nom unique (ce qui ne devrait pas poser de problème), mais je suis curieux de savoir si d'autres personnes ont trouvé un moyen efficace de résoudre ce problème.
5 votes
Quelques mises en garde concernant GetTempFileName La méthode GetTempFileName lève une IOException si elle est utilisée pour créer plus de 65535 fichiers sans supprimer les fichiers temporaires précédents. La méthode GetTempFileName déclenche une exception IOException si aucun nom de fichier temporaire unique n'est disponible. Pour résoudre cette erreur, supprimez tous les fichiers temporaires inutiles.
2 votes
Les fichiers temporaires sont principalement utilisés pour un ensemble de conditions spécifiques. Si l'extension du fichier est importante, je me demande si l'utilisation du GetTempFileName n'est pas la solution d'écriture. Je sais que cela fait longtemps, mais si vous nous en disiez plus sur le contexte et le besoin de ces fichiers, nous pourrions être en mesure de vous suggérer une meilleure approche. plus ici : support.microsoft.com/kb/92635?wa=wsignin1.0
1 votes
Gardez à l'esprit
GetTempFileName()
crée un nouveau fichier à chaque fois que vous l'appelez. -- Si vous changez immédiatement la chaîne de caractères en quelque chose d'autre, vous venez de créer un nouveau fichier de zéro octet dans votre répertoire temporaire (et comme d'autres l'ont noté, cela provoquera éventuellement un échec lorsque vous atteindrez 65535 fichiers dans ce répertoire...) -- Pour éviter cela, assurez-vous de supprimer tous les fichiers que vous créez dans ce répertoire (y compris ceux renvoyés par la commandeGetTempFileName()
idéalement dans un bloc final).