C#:删除Windows临时Internet文件不会删除用户可见文件

时间:2015-01-21 17:45:05

标签: c# winforms windows-7 filesystems

编辑(01/24/2015)注意:在尝试弄清楚为什么这不起作用时,在此处提问之前,我了解到Temporary Internet Files目录实际上是由windows管理的虚拟目录。如果您使用7zip之类的程序浏览Temporary Internet Files目录,您将看到实际的文件系统。

我的目标是删除Windows临时Internet文件。我使用7zip来查看

的目录结构
C:\User\User\AppData\Local\Microsoft\Windows\Temporary Internet Files

并且看到有3个目录:Content.IE5,Low和Virtualized。

通过查看这些目录,我假设我应该只删除Content.IE5和Low的内容。然后我用

string path = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
string path1 = path + "\\Content.IE5\\";
string path2 = path + "\\Low\\";

使用foreach删除这两个目录的所有文件和子目录。

从查看7zip我能够验证目录和文件是否已删除,但是当我去

C:\Users\User\AppData\Local\Microsoft\Windows\Temporary Internet Files

没有删除任何内容。如何从Windows资源管理器中删除我可以查看的文件?

编辑(01/23/2015):这是我的代码。如果有人可以提供帮助,我会非常感激,因为我不知道还有什么可以做,因为它删除了我用7zip可以看到的文件和文件夹,但它没有删除在虚拟目录中看到的内容。 / p>

        Dictionary<string,DirectoryInfo> directories = new Dictionary<string,DirectoryInfo>() {
        {"Temporary Internet Files", new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache))}
    };
        DirectoryInfo dInfoTempIntFilesCont = new DirectoryInfo(directories["Temporary Internet Files"] + "\\Content.IE5\\");
        DirectoryInfo dInfoTempIntFilesLow = new DirectoryInfo(directories["Temporary Internet Files"] + "\\Low\\");

        FileInfo[] fInfoTempIntFiles = directories["Temporary Internet Files"].GetFiles();

        DirectoryInfo[] fInfoTempIntFilesCont = dInfoTempIntFilesCont.GetDirectories();
        DirectoryInfo[] fInfoTempIntFilesLow = dInfoTempIntFilesLow.GetDirectories();

        try
        {
            foreach (var file in fInfoTempIntFiles)
            {
                try
                {
                    file.Delete();
                }
                catch (Exception)
                {

                }
            }

            foreach (var subDirectory in fInfoTempIntFilesCont)
            {
                try
                {
                    subDirectory.Delete(true);
                }
                catch (Exception)
                {

                }
            }

            foreach (var subDirectory in fInfoTempIntFilesLow)
            {
                try
                {
                    subDirectory.Delete(true);
                }
                catch (Exception)
                {

                }
            }

编辑(01/24/2015):以下是环境路径正确的证明以及GetFiles的结果。

Temporary Internet Files path and result of GetFiles()

2 个答案:

答案 0 :(得分:0)

删除空的catch块,系统会告诉你你做错了什么。

答案 1 :(得分:0)

要访问shell虚拟文件夹,您将使用shell脚本对象。要开始使用,请添加对

的引用
using System;
using Shell32;

namespace SO28073584
{
    class Program
    {
        static void Main(string[] args)
        {
            var sh = (IShellDispatch4)Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application"));
            var tempFiles = sh.NameSpace(Shell32.ShellSpecialFolderConstants.ssfINTERNETCACHE);
            foreach ( Shell32.FolderItem item in tempFiles.Items() )
            {
                Console.WriteLine(item.Name);
            }
        }
    }
}

Delete个对象上没有Shell32.FolderItem方法,但您应该可以使用InvokeVerb("delete")

或者,使用(Shell32.FolderItems2)tempFiles.Items()及其InvokeVerbEx方法一次删除整个群。