【发布时间】:2020-04-15 06:13:10
【问题描述】:
我正在媒体播放器中播放*.mp4 文件,但同时尝试将文件从一个地方移动到另一个地方,我需要检查该文件是否正在被另一个进程访问,我想阻止移动进程。
public Boolean fileInUse(FileInfo file)
{
FileStream stream=null;
try
{
stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
}
catch (IOException)
{
//File is in use
Console.WriteLine("File is Being used");
return true;
}
finally {
if (stream != null) {
stream.Close();
}
}
Console.WriteLine("File is not in use");
return false;
}
【问题讨论】:
-
这能回答你的问题吗? Is there a way to check if a file is in use?
-
请记住,即使您编写了“如果文件未使用,则移动它”的代码,另一个应用程序可能会在您执行“如果”的时间之间潜入并打开文件以及你做“那么”的时间。确保可以移动文件的唯一有保证的方法是实际移动它,并捕获任何异常。当然,您仍然可以按照您的要求进行先发制人检查,例如提供更好的用户体验(例如,如果您知道无法移动文件,请禁用“移动”按钮)。但是当你最终完成移动时,你仍然必须准备好捕捉异常。
-
@JoeWhite 我没有用于移动过程的 UI,特别是它应该是自动化的,无法禁用按钮,因为我没有。
-
@JoeWhite 不一定会有例外,因为您可以移动正在使用的文件。
标签: c# .net visual-studio io