如何在Windows资源管理器中刷新文件的缩略图?

时间:2010-08-24 11:11:17

标签: c# file-io windows-xp thumbnails windows-explorer

我们的Windows文件服务器安装了一个存档服务,其“存根”文件在指定的时间段内未被访问。当对存根文件的请求发送到服务器时,存档服务将存根替换为原始文档并将其提供给用户。

关于存档服务的一个主要抱怨是照片的缩略图不再可用。我决定在C#中创建一个程序,允许用户选择一个文件夹并取消存储其中的所有文件。它通过读取文件夹中每个文件的第一个字节来完成此操作:

if (Directory.Exists(path))
{
    DirectoryInfo di = new DirectoryInfo(path);
    FileInfo[] potentiallyStubbedFiles = di.GetFiles();
    foreach (FileInfo fi in potentiallyStubbedFiles)
    {
        //ignore Thumbs.db files
        if(!fi.Name.Equals("Thumbs.db"))
        {
            Console.WriteLine("Reading " + fi.Name);
            try
            {
                FileStream fs = File.Open(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.None);

                try
                {
                    //read the first byte of the file, forcing it to be unstubbed
                    byte[] firstByte = new byte[1];
                    fs.Read(firstByte, 0, 1);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("An error occurred trying to read " + fi.Name + ":");
                }

                fs.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("An error occurred trying to open " + fi.Name + ":");
            }
        }
    }
    Console.WriteLine("Finished reading files.");
}
else
{
    Console.WriteLine("\"" + path + "\" is not a valid directory.");
}

效果很好,但我想解决一个小问题。

在Windows 7中,当FileStream关闭时,Windows资源管理器会刷新文件并显示正确的缩略图,因此您可以在取消注释时查看每个文件的缩略图。但是,在Windows XP中,Explorer在程序退出之前不会刷新文件,迫使用户等到所有文件都被取消后才能浏览它们。

有没有办法强制Windows XP在阅读后立即重新创建文件的缩略图?程序关闭后会给出什么信号来刷新文件?或者我完全以错误的方式解决这个问题?

2 个答案:

答案 0 :(得分:1)

似乎没有与Windows XP的接口。 Vista及以上版本介绍了IThumbnailCache界面。

你能不能删除thumbs.db并强制它?

拇指的格式没有记录,但是http://vinetto.sourceforge.net/有一个项目试图理解它,如果你想钻研,可能会给出一些指示。

答案 1 :(得分:0)

使用SHCNE_UPDATEITEM尝试SHChangeNotify。