C# 文件删除不起作用

C# 文件删除不起作用,c#,asp.net,C#,Asp.net,我编写了一个函数,可以从文件的位置删除文件。代码如下所示: if (File.Exists(strPath + "/FLV/" + flvvideoname)) { File.Delete(strPath + "/FLV/" + flvvideoname); } “strPath”是指向目录的路径。执行代码get时,文件并不总是被删除。反复运行相同的代码将删除该文件。当我解决这个问题时,断点不会超过文件删除行,我也没有看到任何错误。如果断点超过文件删除行,则表示文件已正确删除 如何解决

我编写了一个函数,可以从文件的位置删除文件。代码如下所示:

if (File.Exists(strPath + "/FLV/" + flvvideoname))
{
    File.Delete(strPath + "/FLV/" + flvvideoname);
}
“strPath”是指向目录的路径。执行代码get时,文件并不总是被删除。反复运行相同的代码将删除该文件。当我解决这个问题时,断点不会超过文件删除行,我也没有看到任何错误。如果断点超过文件删除行,则表示文件已正确删除


如何解决此问题?

文件创建的句柄有时无法释放。试着打电话

GC.Collect();
GC.WaitForPendingFinalizers();
删除前

还请检查此问题:

编辑:


除了awoid调用GC.Collect()(出于Boas Enker指出的原因),您可能希望在循环中等待文件-

我确信问题不在于文件删除。可能是在从数据库检索文件名或动态设置某个变量时,您不是在第一页加载时执行此操作,而是在回发时执行此操作。因此,如果要动态检索文件名,请执行下一步:

if (!IsPostBack){//function for retrieving data from database
//您的\u变量=某个\u值;

}

是否确定没有任何其他进程访问该文件?确保运行IIS进程的用户有权修改此目录。
Delete不会删除为正常I/O打开的文件或内存映射的文件。
如果满足条件,则执行
文件。Delete
,如果没有引发异常,则表示文件已被删除。使用
System.IO.Path.Combine(strPath,“FLV”,flvvideoname)
不是一个好主意。Collect对整个运行时有巨大的影响。此外,它也不能解决问题,使系统更少predictable@BoasEnkler我试过这个方法,它奏效了。有其他选择吗?@AhmedMujtaba有一些不好的选择,比如使用Thread.Sleep(),但你不习惯这样做。问题是为什么文件被锁定。有更多的代码访问该文件吗?您是否正在刷新和处理访问该文件的其他参与者?我不同意,我更希望在循环中检查操作是否成功,而不是调用gc.collect。在小型原型应用程序中,这并不重要,但是当有一个正常的大尺寸应用程序,并且在这样一个“细节”事件中有gc.collect时,它可能会重复出现很多时间,那么您可能会把整个垃圾收集搞得一团糟。。。。请参阅示例重试操作(如果没有其他可能的话)只会产生局部效果,不会对整个运行时产生负面影响