我试图找出用户是否在手机上的音乐文件夹中添加了新音乐,因为应用上次使用了该应用.
我尝试通过检查音乐文件夹的DateModified(在向手机添加新音乐时在计算机上正确更新)来执行此操作:
async void GetModifiedDate ()
{
BasicProperties props = await KnownFolders.MusicLibrary.GetBasicPropertiesAsync();
Debug.WriteLine("DATEMODIFIED: " + props.DateModified.ToString());
}
不幸的是,这回归
DATEMODIFIED: 1/1/1601 1:00:00 AM +01:00
我做错了还是有另一种快速方法来检查用户是否添加了新音乐?
最佳答案
KnownFolders.MusicLibrary是
virtual location.因此我认为,获得其属性可能是一个问题.
另一个问题是DateModified可能是个坏主意,因为当用户添加文件时它可能保持不变.你无法接力. (some information).你可以检查一下 – 当我试图在文件夹中移动文件时,他们的DateModified没有改变.
所以在这种情况下,我担心你必须在MusicLibrary中列出你的文件,然后决定保存什么以供将来比较.文件大小的总和可能是个好主意,因此两个不同的音乐文件大小相同的可能性很小.如果用户已将文件从一个文件夹移动到另一个文件夹(总大小不会更改),则还需要通知您.如果你想确保更多,你可以记住Tuple< file.FolderRelativeId,fileSize>的整个列表. (例如).
由于FileQueries尚不适用于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;
}
获得文件列表后,您可以决定要记住哪些内容,以便在下次应用启动时进行进一步比较.