gpt4 book ai didi

windows-8 - 识别 StorageFolder 中的文件更改

转载 作者:行者123 更新时间:2023-12-02 03:48:09 25 4
gpt4 key购买 nike

我正在尝试使数据库与 Windows 8 音乐库保持同步,但我尚未找到有效的解决方案。我知道 .NET 有一个 Windows 8 应用程序无法使用的 FileSystemWatcher。目前,我的想法是将 GetFilesAsync 返回的文件列表与我的数据库进行比较,并检查是否修改、删除或添加了某些内容。我知道这并不理想,但我在 Windows.Storage 中找不到任何其他有用的东西。我的问题是一旦对音乐库进行了修改,我想自动进行这些更新。当更改发生在子文件夹中时,检查文件夹的 ModifiedDate 是无用的。有人知道是否有办法判断何时修改了 StorageFolder 吗?

最佳答案

如果您能够让 ContentsChanged 可靠地触发,那么下面的代码可能会帮助您确定发生了什么变化。

请注意,它并不快。 GetBasicPropertiesAsync 似乎需要大约 5 毫秒/文件...所以大约需要 10 秒来区分一组 1000 个文件。

(我无法让 ContentsChanged 可靠地触发,而且,经过几个小时的谷歌搜索,似乎很多其他人也有同样的问题)

    private class DiffSet
{
public IReadOnlyList<StorageFile> Added { get; set; }
public IReadOnlyList<StorageFile> Deleted { get; set; }
public IReadOnlyList<StorageFile> Changed { get; set; }
}

private static async Task<DiffSet> Diff(IEnumerable<StorageFile> oldSet, IEnumerable<StorageFile> newSet)
{
var newAsDict = newSet.ToDictionary(sf => sf.Path);

var added = new List<StorageFile>();
var deleted = new List<StorageFile>();
var changed = new List<StorageFile>();

var fromOldSet = new HashSet<string>();

foreach (var oldFile in oldSet)
{
if (!newAsDict.ContainsKey(oldFile.Path))
{
deleted.Add(oldFile);
continue;
}

var oldBasicProperties = await oldFile.GetBasicPropertiesAsync();
var newBasicProperties = await newAsDict[oldFile.Path].GetBasicPropertiesAsync();

var oldDateModified = oldBasicProperties.DateModified;
var newDateModified = newBasicProperties.DateModified;

if (oldDateModified != newDateModified)
{
changed.Add(oldFile);
}

fromOldSet.Add(oldFile.Path);
}

foreach (var newFile in newSet)
{
if (!fromOldSet.Contains(newFile.Path))
added.Add(newFile);
}

return new DiffSet
{
Added = added,
Deleted = deleted,
Changed = changed
};
}

关于windows-8 - 识别 StorageFolder 中的文件更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575926/

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