gpt4 book ai didi

c# - WinRT 中(更新 ModifiedTime)中 "Touch"文件的优雅/高效方式?

转载 作者:行者123 更新时间:2023-11-30 12:12:55 24 4
gpt4 key购买 nike

在(更新 ModifiedTime)WinRT 中“触摸”文件的优雅/高效方式?

我有一些代码需要删除超过 30 天的文件。这很好用,但在某些情况下,我需要更新文件上的时间以重置 30 天窗口,并防止删除。在 basicProperties 列表中,ModifiedTime 是只读的,所以我需要找到另一种方法来更新它......

方法一:重命名两次

    // Ugly, and may have side-effects depending on what's using the file
// Sometimes gives access denied...
public static async Task TouchFileAsync(this StorageFile file)
{
var name = file.Name;
await file.RenameAsync("~" + name).AsTask().ContinueWith(
async (task) => { await file.RenameAsync(name); }
);
}

方法二:修改文件属性

    // Sometimes works, but currently throwing an ArgumentException for
// me, and I have no idea why. Also tried many other properties:
// http://msdn.microsoft.com/en-us/library/windows/desktop/bb760658(v=vs.85).aspx
public static async Task TouchFileAsync(this StorageFile file)
{
var prop = new KeyValuePair<string, object>("System.Comment", DateTime.Now.Ticks.ToString());
await file.Properties.SavePropertiesAsync(new[] { prop });
}

方法 3:通过 P/Invoke 使用 Win32 API?

  • 不确定这是否适用于 ARM 设备?
  • 通过认证?
  • 表现出色?
  • 有没有最好的方法来做到这一点?代码示例?

有人有其他想法吗?我有点卡住了:-)

非常感谢,乔恩

最佳答案

我刚好需要这个,这是我的解决方案。

用法

await storageFileToTouch.TouchAsync();

代码

public static class StorageFileExtensions
{
/// <summary>
/// Touches a file to update the DateModified property.
/// </summary>
public static async Task TouchAsync(this StorageFile file)
{
using (var touch = await file.OpenTransactedWriteAsync())
{
await touch.CommitAsync();
}
}
}

关于c# - WinRT 中(更新 ModifiedTime)中 "Touch"文件的优雅/高效方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604110/

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