编辑(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的结果。
答案 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
方法一次删除整个群。