C# WIndows Phone 8.1检查新媒体文件

C# WIndows Phone 8.1检查新媒体文件,c#,windows-phone,windows-phone-8.1,checksum,contentobserver,C#,Windows Phone,Windows Phone 8.1,Checksum,Contentobserver,检查windows phone 8.1上的多媒体资料中是否有新媒体文件的最佳方法是什么 我发现WP81中没有像iOS7或Android那样的内容观察者API 我目前正在使用windows.storage列表计算每个文件的名称和大小的校验和,并在本地存储。每次检查新项目时,我都会为每个文件重新创建校验和,并将其与保存的校验和列表进行比较 当文件数量更多时,这会带来巨大的开销 有没有更优雅的方法 目前没有API可以执行此操作,因此在这种情况下,恐怕您必须在媒体文件(例如MusicLibrary)中列

检查windows phone 8.1上的多媒体资料中是否有新媒体文件的最佳方法是什么

我发现WP81中没有像iOS7或Android那样的内容观察者API

我目前正在使用windows.storage列表计算每个文件的名称和大小的校验和,并在本地存储。每次检查新项目时,我都会为每个文件重新创建校验和,并将其与保存的校验和列表进行比较

当文件数量更多时,这会带来巨大的开销


有没有更优雅的方法

目前没有API可以执行此操作,因此在这种情况下,恐怕您必须在媒体文件(例如MusicLibrary)中列出您的文件,然后决定保存什么以备将来比较。文件大小之和是个好主意,因此两个不同的音乐文件大小相同的可能性很小。如果用户已将文件从一个文件夹移动到另一个文件夹(总大小不变),这还取决于您是否希望收到通知。如果您想确保更多,您可以记住整个
元组列表
由于Windows Phone尚未提供文件查询,因此您必须递归地检索文件。简单代码如下所示:

 // first - a method to retrieve files from folder recursively 
private async Task RetriveFilesInFolder(List<StorageFile> list, StorageFolder parent)
{
foreach (var item in await parent.GetFilesAsync()) list.Add(item);
foreach (var item in await parent.GetFoldersAsync()) await RetriveFilesInFolder(list, item);
}

private async Task<List<StorageFile>> GetFilesInMusic()
{
StorageFolder folder = KnownFolders.MusicLibrary;
List<StorageFile> listOfFiles = new List<StorageFile>();
await RetriveFilesInFolder(listOfFiles, folder);
return listOfFiles;
}
//first-从文件夹递归检索文件的方法
专用异步任务检索文件信息文件夹(列表、存储文件夹父级)
{
foreach(wait parent.getfileasync()中的var项)list.Add(项);
foreach(wait parent.GetFoldersAsync()中的var项)wait retrieveFileInfolder(列表,项);
}
专用异步任务GetFilesInMusic()
{
StorageFolder=KnownFolders.MusicLibrary;
List listOfFiles=新列表();
等待检索文件信息文件夹(列表文件、文件夹);
返回文件列表;
}

一旦你有了一个文件列表,你就可以决定在下一次应用发布时记住什么以便进一步比较。

可能没有简单的解决方案。