我搜索过很多例子,但没有一个能适合我。我正在使用C#。
我的应用程序只有在文件关闭时才需要删除文件夹中的文件。
try-catch File.Open(...)方法仅适用于某些文件类型,如doc,xls,ppt,pdf,mp3等,但不适用于txt,zip,html等......
答案 0 :(得分:11)
您所看到的行为与文件的扩展名或内容无关。它与关联的应用程序处理这些文件的方式有关。例如,一旦读取内容,记事本,Internet Explorer等就不会对打开的文件进行锁定。这就是.txt和.html文件能够打开的原因。
Microsoft Office,几乎所有媒体播放器等都会锁定文件。在Office的情况下,它这样做是为了确保其他程序不会从其下删除/移动文件。对于媒体播放器,文件通常太大而无法完全读入内存。这就是为什么这些文件类型在使用时被锁定的原因。
换句话说,那些看似未使用的文件实际上并未使用。该程序从文件中读取数据并关闭它,现在它已完成。如果不再有文件的打开句柄,那么确定另一个程序是否打开特定文件真的没有简单的方法。
答案 1 :(得分:0)
以二进制模式打开文件File.Open(...)适用于所有文件。
答案 2 :(得分:0)
尝试在写入模式下打开文件,我认为有一些东西可以指定锁定是令人厌恶的......但是出于某种原因,如果你的线程死了......如果该锁定将自动释放则不会...
答案 3 :(得分:0)
您只需要删除未使用的文件... rigth ...只需忽略File.Delete引发的异常即可。因为它不会删除正在使用的文件..
try
{
File.Delete(path);
}
catch(Exception e)
{
// ignore ... or whatever action
}
您还可以捕获特定异常以执行特定操作...例如正在使用的文件的IOException,对于只读文件和权限问题的UnauthorizedAccessException等...
检查文件是否打开然后尝试删除可能仍然是异常,因为某些进程在检查和删除操作之间可能已经打开了文件。