有谁知道为什么下面的代码抛出System.ArgumentException?
using (var tfc = new TempFileCollection())
{
var fn = tfc.AddExtension("tmp");
Console.WriteLine(fn);
}
这是完全正常的例外:
System.ArgumentException: The file name 'C:\Users\pczapla\AppData\Local\Temp\iqulrqva.tmp' was already in the collection.
Parameter name: fileName.
答案 0 :(得分:1)
似乎第一次调用AddExtension
方法时,它会自动添加带有“tmp”扩展名的文件名,然后再尝试使用指定的扩展名添加文件名。
因此,如果您指定“tmp”作为扩展名,那么它将尝试两次添加相同的文件,从而导致异常。
using (var tfc = new TempFileCollection())
{
var foo = tfc.AddExtension("foo");
var bar = tfc.AddExtension("bar");
foreach (var f in tfc)
{
Console.WriteLine(f);
}
}
以上代码将生成以下输出。请注意,它包含一个带有“tmp”扩展名的文件名,我们没有明确添加。
C:\Users\Luke\AppData\Local\Temp\jmat4jqg.tmp
C:\Users\Luke\AppData\Local\Temp\jmat4jqg.bar
C:\Users\Luke\AppData\Local\Temp\jmat4jqg.foo
答案 1 :(得分:1)
一点反射操作会在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);
这是TempFileCollection.EnsureTempNameCreated
,由TempFileCollection.BasePath
调用,由TempFileCollection.AddExtension
调用。我猜占位符使用“.tmp”,所以你不能。