我们的 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 中,资源管理器在程序退出之前不会刷新文件,这迫使用户等到所有文件都被取消存根后才能浏览它们。
有什么方法可以强制 Windows XP 在读取文件后立即重新创建文件的缩略图?程序关闭后刷新文件的信号是什么?还是我完全以错误的方式解决这个问题?