陷入Limbo:测试与文件相关的类与IOException挂起

时间:2012-02-21 10:39:50

标签: c# .net visual-studio-2010 mstest

这些天我常常会感到惊讶,但是这个小家伙真的拥有我的游击队风格:

正在测试的方法: CopyAllFiles(sourceDir,targetDir) - 我猜不需要解释它的作用。

在我的测试中,我在调用测试主题之前创建了两个目录。此外,我将三个文件添加到sourceDir位置创建的目录中。让代码说:

FileSystemService serviceUnderTest = new FileSystemService(); 
string sourcePath= Path.Combine(_dateiPfad, "quelle");
string destinationPath= Path.Combine(_dateiPfad, "ziel");

Directory.CreateDirectory(sourcePath);
Directory.CreateDirectory(destinationPath);
File.Create(Path.Combine(sourcePath , "Foo.txt"));
File.Create(Path.Combine(sourcePath , "Bar.csv"));
File.Create(Path.Combine(sourcePath , "Baz.xls"));

serviceUnderTest.CopyAllFiles(sourcePath, destinationPath);
IEnumerable<string> sourceFiles= from fileName in Directory.GetFiles(sourcePath) select fileName;
IEnumerable<string> destinationFiles= from fileName in Directory.GetFiles(destinationPath) select fileName ;

Assert.IsTrue(sourceFiles.SequenceEqual(destinationFiles));

我收到一条IOException,说“另一个进程正在使用该文件”。 为什么我无法访问刚刚创建的文件?

提前大事!

1 个答案:

答案 0 :(得分:2)

File.Create()返回创建的文件的FileStream。您需要关闭流才能在CopyAllFiles()方法中访问该文件:

FileStream foo = File.Create(Path.Combine(sourcePath, "Foo.txt"));
foo.Close();

您也可以使用WriteAllText写出测试文件:

File.WriteAllText(Path.Combine(sourcePath, "Foo.txt"),"FooTest");