簡體   English   中英

UWP內容事件已更改

[英]UWP Event on content changed

我想觀察一個文件夾。 就像我想要一個事件,當內容更改時。 我找到了這個

var options = new Windows.Storage.Search.QueryOptions
{
          FolderDepth = Windows.Storage.Search.FolderDepth.Deep
};
var query = Folder.CreateFileQueryWithOptions(options);
query.ContentsChanged += QueryContentsChanged;
var files = await query.GetFilesAsync();

 private  void QueryContentsChanged(IStorageQueryResultBase sender, object args)
 {
        //Code here
 }

但是問題是我找不到導致該事件的文件,甚至不知道是什么導致了該事件(例如Modify,Create,Delete或Rename),如何獲取這些詳細信息?

我用了這段代碼

    public async void MonitorFolder()
    {
        var options = new Windows.Storage.Search.QueryOptions
        {
            FolderDepth = Windows.Storage.Search.FolderDepth.Deep
        };

        var query = Folder1.CreateFileQueryWithOptions(options);
        query.ContentsChanged += QueryContentsChanged;
        var files = await query.GetFilesAsync();
        await addtoOld(Folder1, Old);
    }
 private async void addtoOld(StorageFolder folder1, List<FDate> old)
    {
        var files = await folder1.GetFilesAsync();
        foreach (var file in files)
        {
            BasicProperties basicProperties = await file.GetBasicPropertiesAsync();
            FDate f = new FDate
            {
                Path = file.Path,
                Id = file.FolderRelativeId,
                Modified = basicProperties.DateModified,
                Change = ChangeType.NoChange,
                FileType = Type.File
            };
            old.Add(f);
        }
        var folders = await folder1.GetFoldersAsync();
        foreach (var folder in folders)
        {
            BasicProperties basicProperties = await folder.GetBasicPropertiesAsync();
            FDate f = new FDate
            {
                Path = folder.Path,
                Id = folder.FolderRelativeId,
                Modified = basicProperties.DateModified,
                Change = ChangeType.NoChange,
                FileType = Type.Folder
            };
            old.Add(f);
            addtoOld(folder, old);
        }
        return;
    }

private async void QueryContentsChanged(IStorageQueryResultBase sender, object args)
    {
        New.Clear();
        List<FDate> changed = new List<FDate>();

        await addtoOld(Folder1, New);
        foreach(var f in New)
        {
            var f1 = getFile(f);
            if (f1 != null)
            {
                if (f1.Modified < f.Modified)
                {
                    f1.Change = ChangeType.Modified;
                    changed.Add(f1);
                }
                Old.Remove(f1);
            }
            else
            {
                f.Change = ChangeType.Created;
                changed.Add(f);
            }
        }
        foreach (var f in Old)
        {
            f.Change = ChangeType.Deleted;
            changed.Add(f);
        }
        Old = New;
 foreach (var f in changed)
 {
     if(f.FileType== Type.File)
     {
          if (f.Change == ChangeType.Modified)
          {
               //code here
          }
           if(f.Change == ChangeType.Created)
           {
                //Created code here
           }
           if(f.Change == ChangeType.Deleted)
           {
               //Deleted code here
           }
      }
      else
      {
           if (f.Change == ChangeType.Created)
           {
                   //Created code here     
           }
           if(f.Change == ChangeType.Deleted)
           {
                 //Deleted code here           
           }
      }
}
private FDate getFile(FDate f)
{
    foreach(var fi in Old)
    {
        if (f.Name == fi.Name)
               return fi;
    }
    return null;
 }

這段代碼無法正常運行,因為addtoOld是異步的。代碼無法替換,因為它是遞歸的。 和功能無法同步它有很多等待我該如何解決呢?

注意:OLD和New是列表ChangeType和Type是枚舉

根據以下博客文章,不幸的是,無法確定事件的原因,也沒有有關受影響項目的信息。

WinRT中的文件系統更改通知: http : //lunarfrog.com/blog/filesystem-change-notifications

因此,我想您將不得不遍歷所有文件並檢查其Properties屬性,以確定每個文件的最后修改,創建時間等。: https : //docs.microsoft.com/zh-cn/uwp/api/windows.storage .storagefile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM