gpt4 book ai didi

c# - FileSystemWatcher 未检测到 Windows 10 上的 JPG 旋转

转载 作者:行者123 更新时间:2023-11-30 20:28:32 25 4
gpt4 key购买 nike

我们的 WPF 应用程序中有一个 FileSystemWatcher,它监视目录并显示该目录中文件的实时 View 。每次文件夹更改(创建、重命名、删除或更改文件)时,FileSystemWatcher 都会刷新此实时 View 。

我们注意到,当使用 Windows 资源管理器 中的旋转按钮 旋转 JPG 文件时,不会触发 FileSystemWatcher 事件(它会使用 PNG、BMP、TIFF 和 TIF 文件):

Rotate buttons

照片应用中双击文件和旋转JPG 确实会触发事件,所以这里一定有区别。

我只能在 Windows 10 上测试它,但我的同事确认它在以前的 Windows 版本中有效。

有没有办法使用 FileSystemWatcher 检测 JPG 文件旋转,或者这是一个已知错误?

可以使用以下代码测试该问题:

    public MainWindow()
{
InitializeComponent();

var watcher = new System.IO.FileSystemWatcher();
watcher.Path = Environment.GetFolderPath(System.Environment.SpecialFolder.MyPictures);
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
watcher.Filter = "*.*";
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;

watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Changed += new FileSystemEventHandler(OnChanged);
}

private void OnChanged(object sender, FileSystemEventArgs e)
{
Debug.WriteLine("The file " + e.Name + " was " + e.ChangeType);
}

最佳答案

这很可能是因为在 JPEG 中旋转通常由 EXIF 元数据标志控制。因此,当您在资源管理器中旋转 jpeg 时 - 不会执行实际旋转。相反,它只是更改 EXIF 旋转值(我记得可以是 0、1、2、3 等)。当您在某些查看器中打开文件时 - 它会读取旋转标志并执行旋转以进行显示。因为标志具有固定大小(在文件中占用固定数量的字节) - 此操作不会更改文件的大小,并且您只跟踪大小更改。要修复 - 添加 NotifyFilters.LastWrite 到您的 FileSystemWatcher 过滤器。还有其他操作不会改变文件的大小,因此无论如何这样做都是有益的。

关于c# - FileSystemWatcher 未检测到 Windows 10 上的 JPG 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com