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这是我在控制台应用程序文件中编写的唯一代码。