删除C#中文件以外的目录中的所有内容

时间:2011-04-01 23:22:06

标签: c# file delete-file

我在删除文件(index.dat)以外的目录中的所有内容时遇到问题 我试图清除cookies文件夹和文件的临时文件夹,但是当我尝试删除index.dat时出现错误,因为它被另一个进程使用。有没有办法删除temp和cookies文件夹中的所有内容,除了 index.dat文件?这是我的代码:

string userProfile = Environment.GetEnvironmentVariable("USERPROFILE");
string strDirLocalq = Path.Combine(userProfile, "AppData");
string strDirLocalw = Path.Combine(strDirLocalq, "Roaming");
string strDirLocale = Path.Combine(strDirLocalw, "Microsoft");
string strDirLocalr = Path.Combine(strDirLocale, "Windows");
string strDirLocalt = Path.Combine(strDirLocalr, "Cookies");

string[] filePaths = Directory.GetFiles(strDirLocalt);
foreach (string filePath in filePaths)
    File.Delete(filePath);

7 个答案:

答案 0 :(得分:11)

这有效:

string[] filePaths = Directory.GetFiles(strDirLocalt);
foreach (string filePath in filePaths)
{
    var name = new FileInfo(filePath).Name;
    name = name.ToLower();
    if (name != "index.dat")
    {
        File.Delete(filePath);
    }
}

答案 1 :(得分:4)

看看这个有趣的解决方案!

List<string> files = new List<string>(System.IO.Directory.GetFiles(strDirLocalt));
files.ForEach(x => { try { System.IO.File.Delete(x); } catch { } });

感受语言之美!

答案 2 :(得分:2)

只需在File.Delete周围放置一个try / catch,因为可能有更多正在使用的文件也会抛出异常。

try
{
  File.Delete(filePath);
}
catch (Exception ignore)
{
}

答案 3 :(得分:1)

string[] filePaths = Directory.GetFiles(strDirLocalt); 
foreach (string filePath in filePaths)
 try {
   File.Delete(filePath);
 }
 catch{ }
}

答案 4 :(得分:0)

只需从列表中过滤

即可
foreach (string filePath in filePaths.Where(!filePath.Contains("index.dat"))
    File.Delete(filePath);

答案 5 :(得分:0)

为什么不捕获异常 - 当您尝试删除任何文件时,可能会有任何文件被使用。

try{
     // delete
}
catch{
}

答案 6 :(得分:0)

一种可能仍然有效的方法是以安全模式启动,然后为自己分配管理员权限,然后查看是否可以找到要删除的文件

我现在使用的方法是创建一个批处理文件来重命名包含index.bat文件的文件夹下面的子文件夹,然后只将文件夹复制回原始位置,但不包含这些文件但生成的批处理文件文件需要从具有完全管理员权限的单独Windows帐户运行。