-->

如何刷新文件在Windows资源管理器缩略图?(How do I refresh a file

2019-09-29 17:37发布

我们的Windows文件服务器已安装的“存根”,但没有一个确定的时间内访问过的文件的归档服务。 当废止文件的请求被发送到服务器,存档服务取代了存根与原文档,并将其提供给用户。

有关归档服务的主要抱怨是,对于照片的缩略图不再可用。 我决定建立在C#程序,将允许用户选择一个文件夹,并在unstub的所有文件。 它通过读取文件夹中的每个文件的第一个字节:

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资源管理器刷新该文件并显示正确的缩略图,所以你可以看到每个文件的缩略图,因为它们是unstubbed。 在Windows XP中,然而,浏览器不会刷新文件,直到程序退出,迫使用户要等到所有的文件都能够浏览他们之前已经unstubbed。

有没有办法强制Windows XP看完后,立即重新创建该文件的缩略图? 被赋予什么信号刷新文件的程序关闭后? 或者,我会对此完全错误的方式?

Answer 1:

尝试SHChangeNotify与SHCNE_UPDATEITEM。



Answer 2:

似乎没有对与Windows XP的界面。 Vista和上面介绍的IThumbnailCache接口。

你能不能删除的Thumbs.db,并迫使它呀?

大拇指的格式是未记录,但有一个项目http://vinetto.sourceforge.net/试图理解它,可能会给一些指针,如果你想深入。



文章来源: How do I refresh a file's thumbnail in Windows Explorer?