首页 新闻 会员 周边

C# WinForm XML被占用问题

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-13 14:46

先上代码再说问题:

public void DeleteFile(string TempPath)         
{
             foreach (string sFile in Directory.GetFileSystemEntries(TempPath)))
             {
if (File.Exists(sFile)) { FileInfo fi = new FileInfo(sFile); //文件为只读时取消只读 if (fi.IsReadOnly) { fi.IsReadOnly = false; } try { //永久删除文件 fi.Delete(); } catch (Exception ex) { ...... } } else { break; } } }

上面的方法是删除指定文件夹中的文件

比如文件夹是TempPath

假如里面有4个文件:

a.xml

b.exe

c.dll

d.xml

删除前3个没问题,删除到第4个的时候报出d.xml被其他进程占用的错误。

我想应该是xml的问题,但是不知道具体怎么解决。

请问大侠们有没有什么主意?

Raisa的主页 Raisa | 初学一级 | 园豆:148
提问于:2012-09-13 12:10
< >
分享
最佳答案
0
var fiels=Directory.GetFileSystemEntries(TempPath);
foreach (string sFile in fiels)
             {
                 if (File.Exists(sFile))
                 {
                     FileInfo fi = new FileInfo(sFile);
                     //文件为只读时取消只读
                     if (fi.IsReadOnly)
                     {
                         fi.IsReadOnly = false; 
                    }
                     try 
                    {
                         //永久删除文件
                         fi.Delete(); 
                    }
                     catch (Exception ex)
                     {
                         ......
                     } 
                }  
            }
收获园豆:20
向往-SONG | 老鸟四级 |园豆:4853 | 2012-09-13 12:25

试过了可行,请教大侠这是为什么呢,理论上我原来那样也没问题吧。

Raisa | 园豆:148 (初学一级) | 2012-09-13 12:37

@Raisa: 

具体原因我也不清楚,只是foreach里的集合应该是固定不变的才能正确遍历,比如当你在foreach里删除集合项时会报错。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-13 12:48

@向往-SONG: 好吧,时间紧,有空再细细琢磨,嘿嘿。谢谢大侠。

Raisa | 园豆:148 (初学一级) | 2012-09-13 14:45
其他回答(4)
0

装个 360 ,看下 d.xml 被哪个进程占用了。

Launcher | 园豆:45045 (高人七级) | 2012-09-13 13:11
0

被占用了没有释放。

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-09-13 13:35
0

被占用了没有释放。

jason2013 | 园豆:1998 (小虾三级) | 2012-09-13 14:05
0

释放句柄就可以了

VAllen | 园豆:94 (初学一级) | 2012-09-26 14:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册