C# File.GetCreationTime引发进程无法访问该文件,因为其他进程正在使用该文件

C# File.GetCreationTime引发进程无法访问该文件,因为其他进程正在使用该文件,c#,.net,C#,.net,我正在使用File.GetCreationTime对一些文件进行排序。使用此函数后,当我尝试使用File.move移动时,我收到一个错误: The process cannot access the file because it is being used by another process. 代码如下: foreach (var f in Directory.GetFiles(source)) { DateT

我正在使用
File.GetCreationTime
对一些文件进行排序。使用此函数后,当我尝试使用
File.move移动时,我收到一个错误:

The process cannot access the file because it is being used by another process.
代码如下:

            foreach (var f in Directory.GetFiles(source))
            {
                DateTime creation = File.GetCreationTime(f);
                var fileDest = Path.Combine(destination, creation.Year.ToString());
                if (!Directory.Exists(fileDest))
                {
                    Directory.CreateDirectory(fileDest);
                }

                File.Move(f, Path.Combine(fileDest, Path.GetFileName(f)));
            }
File.GetCreationTime
是否获取文件句柄? 我做错了什么

我使用了建议的重试模式,但代码仍然失败:

            foreach (var f in Directory.GetFiles(source))
            {
                DateTime creation = File.GetCreationTime(f);
                var fileDest = Path.Combine(destination, creation.Year.ToString());
                if (!Directory.Exists(fileDest))
                {
                    Directory.CreateDirectory(fileDest);
                }

                for (int i = 1; i <= 3; ++i)
                {
                    try
                    {
                        File.Move(f, Path.Combine(fileDest, Path.GetFileName(f)));
                        break;
                    }
                    catch (IOException e)
                    {
                        if (i == 3)
                            throw;

                        Thread.Sleep(1000);
                    }
                }
            }
foreach(Directory.GetFiles(source)中的var f)
{
DateTime creation=File.GetCreationTime(f);
var fileDest=Path.Combine(destination,creation.Year.ToString());
如果(!Directory.Exists(fileDest))
{
CreateDirectory(fileDest);
}

对于(int i=1;i而言,错误消息已经准确地告诉您问题所在:您无法移动文件,因为有人正在使用它

查找哪个进程锁定了文件的一个简单方法是使用。只需从菜单中选择“查找>查找句柄”或“DLL…”,然后输入文件名。瞧,结果中显示了进程名:


你确定抛出异常的是
File.GetCreationTime(f);
吗?似乎更有可能是
File.Move()
抛出异常。@MatthewWatson这正是OP所说的“当我试图移动时”可能重复的@user3185569此问题的标题是:“File.GetCreationTime抛出进程无法访问该文件,因为另一个进程正在使用该文件”。它没有说“File.Move()抛出…”。。。“因此产生了混乱。这是失败的,因为您无法移动当前打开的文件,而代码以外的其他内容将其打开。它显示当前的exe名称。但是代码中还有什么可以打开该文件?@Suresh:检查您的代码并查看文件的访问位置。可能您缺少对
Close()的调用。”
某个地方,或者没有用
using
块包装文件的用法,该块将自动释放文件。@DrikVollmar这是我在控制台应用程序文件中编写的唯一代码。