Как обновить эскиз файла в проводнике Windows?
На нашем файловом сервере 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 ответа
Похоже, что нет интерфейса с Windows XP. В Vista и выше представлен интерфейс IThumbnailCache.
Не могли бы вы удалить thumbs.db и заставить его таким образом?
Формат превью не документирован, но на http://vinetto.sourceforge.net/ есть проект, который пытается его понять и может дать некоторые подсказки, если вы хотите вникнуть.