【发布时间】:2017-06-13 09:23:07
【问题描述】:
如何防止从当前处于打开状态的解决方案的 AppDomain.CurrentDomain 中创建的临时文件夹中删除文件.. 我只想删除未使用的文件.. 我试过这个..
public void TempDocumentDeletion()
{
string curUserFolder = AppDomain.CurrentDomain.GetData("DataDirectory") + "\\temp" + "\\" + CurrentUserData.UserId;
DirectoryInfo curdir = new System.IO.DirectoryInfo(curUserFolder);
foreach (FileInfo files in curdir.GetFiles())
{
var fullName = files.FullName;
if (!IsFileLocked(fullName))
{
files.Delete();
}
}
public static bool IsFileLocked(string filePath)
{
var file = new FileInfo(filePath);
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
// still being written to or being processed by another thread
return true;
}
finally
{
if (stream != null)
stream.Close();
}
// file is not locked
return false;
}
但有时,使用过的文件也会被删除...有没有其他方法可以解决它...或者需要进行任何修改。
【问题讨论】:
-
它在哪里被删除了?是否所有线程都在修改您的应用程序中的文件?
-
那是...不是javascript;您能否更具体地了解允许删除正在使用的文件的场景?并且您确定它当时实际上是打开的,而不是“我已经从中读取了我想要的内容,关闭了文件对象,但预计它仍会被锁定”?因为问题中显示的代码只会在最短暂的瞬间被锁定
-
或者您是说要提前检查一个文件是否可以被删除?这听起来是个好主意,但最终只会创建一个竞争条件 - 当你认为你可以删除它时,你必须处理这种情况,尝试删除它,然后失败(通过异常)
标签: c# file file-locking