2009-08-20 7 views

Répondre

1

Un peu d'action réflecteur révèle l'extrait suivant intéressant dans TempFileCollection:

new FileIOPermission(FileIOPermissionAccess.AllAccess, basePath).Demand(); 
path = this.basePath + ".tmp"; 
using (new FileStream(path, FileMode.CreateNew, FileAccess.Write)) 
{ 
} 
flag = true; 
... 
this.files.Add(path, this.keepFiles); 

Ceci est en TempFileCollection.EnsureTempNameCreated, qui est appelé par TempFileCollection.BasePath, qui est appelé par TempFileCollection.AddExtension. Je suppose que l'espace réservé utilise ".tmp" de sorte que vous ne pouvez pas.

1

Il semble que la première fois que vous appelez la méthode AddExtension, il ajoutera automatiquement un nom de fichier avec l'extension « tmp » à la collection avant d'essayer ensuite de ajoutez le nom de fichier avec votre extension spécifiée. Par conséquent, si vous spécifiez "tmp" comme extension, il essaiera d'ajouter deux fois le même fichier, ce qui provoquera l'exception.

using (var tfc = new TempFileCollection()) 
{ 
    var foo = tfc.AddExtension("foo"); 
    var bar = tfc.AddExtension("bar"); 

    foreach (var f in tfc) 
    { 
     Console.WriteLine(f); 
    } 
} 

Le code ci-dessus génère la sortie suivante. Notez qu'il inclut un nom de fichier avec l'extension "tmp" que nous n'avons pas explicitement ajouté.

C:\Users\Luke\AppData\Local\Temp\jmat4jqg.tmp 
C:\Users\Luke\AppData\Local\Temp\jmat4jqg.bar 
C:\Users\Luke\AppData\Local\Temp\jmat4jqg.foo 
Questions connexes