我有来自特定目录的tif文件,我有一个函数来读取所有tif文件并将其转换为文本,转换后我将其移动到成功转换后名为“Completed”的文件夹,并且一旦转换失败,将其移动到Failed文件夹。问题是当我使用System.IO.File的Move方法时,它引发了一个错误,说
“进程无法访问该文件,因为它正由另一个进程使用”
问题是什么,我关闭了文件,我处理了它,但仍然发生了错误?
答案 0 :(得分:1)
请确保在处理过程中关闭文件以及与其相关的任何内容。
(因为您选择不向我们展示代码,我们真的不知道在处理过程中创建了什么。)
查找MemoryStreams,MemoryMapped Files,文件支持的图像,存储在容器中的文件句柄或IEnumerable等等。
您有正确的想法确保明确.Close()
已知引用和Dispose of objects,但某些内容仍然保留文件。
答案 1 :(得分:1)
我有这样的问题,问题是如果我使用Image类的“FromFile”方法创建它,我无法删除原始文件。相反,我使用“FromStream”方法创建它(确保在结束时关闭并处理它)。
我修改了我的代码,就像方法#3一样:http://dotnetguts.blogspot.com/2009/07/process-cannot-access-file-because-it.html
答案 2 :(得分:0)
确保您的转化过程在移动前已完全完成。有时它看起来像是一个过程,但实际上并非如此。
答案 3 :(得分:0)
确保在对其执行不同操作之前关闭StreamReader,StreamWriter以及正在操作该文件的任何其他进程。 例如如果您正在使用StreamReader阅读并需要写入文件关闭StreamReader,然后启动StreamWriter。
或者您可以使用Filestream,我听说在.NET Framework 4.0中他们引入了异步文件操作。