You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP中如何写入从文件资源管理器拖放的只读文件?

解决UWP拖放只读文件无法写入的问题

这个坑我之前踩过!当从文件资源管理器拖放带ReadOnly属性的文件到UWP应用时,直接用StorageFile的写入API确实会抛出权限错误,核心原因就是只读属性限制了写入操作。下面是具体的解决步骤,还附带完整代码示例:

核心思路

先移除文件的ReadOnly属性,完成写入后可以选择恢复原属性(推荐这么做,避免改变用户文件的原始状态)。

具体实现步骤

  • 步骤1:备份原始文件属性
    先获取拖放过来的StorageFile的原始Attributes,保存下来,方便后续恢复。
  • 步骤2:移除只读属性
    通过StorageFile.Properties修改文件属性,去掉FileAttributes.ReadOnly标记。
  • 步骤3:执行写入操作
    此时文件已经允许写入,调用FileIO或者Stream相关API完成写入。
  • 步骤4:(可选)恢复原始属性
    写入完成后,把文件属性改回之前备份的状态,尊重用户文件的原始设置。

完整代码示例(C#)

private async Task WriteToReadOnlyDroppedFileAsync(StorageFile droppedFile, string contentToWrite)
{
    // 步骤1:备份原始属性
    var originalAttributes = (FileAttributes)await droppedFile.Properties.GetAttributesAsync();

    try
    {
        // 步骤2:移除ReadOnly属性
        await droppedFile.Properties.SetAttributesAsync(originalAttributes & ~FileAttributes.ReadOnly);

        // 步骤3:执行写入操作(这里以写入文本为例,你可以换成自己的写入逻辑)
        await FileIO.WriteTextAsync(droppedFile, contentToWrite);
    }
    finally
    {
        // 步骤4:恢复原始属性(无论写入成功还是失败,都尽量恢复)
        await droppedFile.Properties.SetAttributesAsync(originalAttributes);
    }
}

注意事项

  • 确保你的UWP应用有对应的文件访问权限:拖放过来的文件默认会授予应用临时权限,所以修改属性和写入操作一般都能正常执行,不需要额外声明 broadFileSystemAccess 权限(除非是特殊场景)。
  • 放在finally块里恢复属性很重要,这样即使写入过程中抛出异常,也不会把用户的文件改成非只读状态。
  • 如果你的写入逻辑是用IRandomAccessStream实现的,记得在写入完成后关闭流,再执行属性恢复操作。

内容的提问来源于stack exchange,提问作者Soumya Mahunt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:27:41