【问题标题】:C#: Deleting Windows Temporary Internet Files does not delete user visible filesC#:删除 Windows 临时 Internet 文件不会删除用户可见文件
【发布时间】:2015-03-20 08:21:26
【问题描述】:

编辑(2015 年 1 月 24 日)注意: 在试图弄清楚为什么这不起作用时,在此处提问之前,我了解到 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 看到的文件和文件夹,但它不会删除虚拟目录中看到的内容。

        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)
                {

                }
            }

编辑(2015 年 1 月 24 日):这是环境路径正确的证明以及 GetFiles 对它的结果。

【问题讨论】:

    标签: c# winforms windows-7 filesystems


    【解决方案1】:

    要访问 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);
                }
            }
        }
    }
    

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

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

    【讨论】:

    • 谢谢 Ben,我会试一试告诉你的。
    【解决方案2】:

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

    【讨论】:

    • 我想你可能错过了我可以看到它删除虚拟文件的部分。它正在工作。当您通过 Windows 资源管理器转到 Internet 临时文件时,它一定不能点击您可以看到的文件的位置。
    • 我真的不明白你的意思......你所说的“虚拟”文件是什么意思,你为什么使用 7zip 作为文件浏览器?您是否验证了 Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);正在返回 C:\User\User\AppData\Local\Microsoft\Windows\Temporary Internet Files?
    • 在试图弄清楚为什么这不起作用时,在此处提问之前,我了解到 Temporary Internet Files 目录实际上是由 Windows 管理的虚拟目录。如果您使用 7zip 之类的程序来浏览您的 Temporary Internet Files 目录,您将看到实际的文件系统。感谢您提供帮助。
    • 我在我的问题中添加了一个编辑,演示了 GetFiles 的路径和结果。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多