先上代码再说问题:
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的问题,但是不知道具体怎么解决。
请问大侠们有没有什么主意?
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) { ...... } } }
试过了可行,请教大侠这是为什么呢,理论上我原来那样也没问题吧。
@Raisa:
具体原因我也不清楚,只是foreach里的集合应该是固定不变的才能正确遍历,比如当你在foreach里删除集合项时会报错。
@向往-SONG: 好吧,时间紧,有空再细细琢磨,嘿嘿。谢谢大侠。
装个 360 ,看下 d.xml 被哪个进程占用了。
被占用了没有释放。
被占用了没有释放。
释放句柄就可以了