如何使用FileSavePicker保存现有的StorageFile?

2023-12-07

我正在尝试将现有文件保存到另一个地方。这是某种副本,但我想允许用户使用 FileSavePicker 选择新的目的地。 这是我的代码:

StorageFile currentImage = await StorageFile.GetFileFromPathAsync(item.UniqueId);
var savePicker = new FileSavePicker();
savePicker.FileTypeChoices.Add("JPEG-Image",new List<string>() { ".jpg"});
savePicker.FileTypeChoices.Add("PNG-Image", new List<string>() { ".png" });
savePicker.SuggestedSaveFile = currentImage;
savePicker.SuggestedFileName = currentImage.Name;
var file = await savePicker.PickSaveFileAsync();

之后将创建该文件,但它是空的 (0 KB)。如何正确保存文件?


我找到了解决方案,它与上面假设的有点不同。它基于字节数组的复制和写入。

        var curItem = (SampleDataItem)flipView.SelectedItem;
        StorageFile currentImage = await StorageFile.GetFileFromPathAsync(curItem.UniqueId);
        byte[] buffer;
        Stream stream = await currentImage.OpenStreamForReadAsync();
        buffer = new byte[stream.Length];
        await stream.ReadAsync(buffer, 0, (int)stream.Length); 
        var savePicker = new FileSavePicker();
        savePicker.FileTypeChoices.Add("JPEG-Image",new List<string>() { ".jpg"});
        savePicker.FileTypeChoices.Add("PNG-Image", new List<string>() { ".png" });
        savePicker.SuggestedSaveFile = currentImage;
        savePicker.SuggestedFileName = currentImage.Name;
        var file = await savePicker.PickSaveFileAsync();
        if (file != null)
        {
            CachedFileManager.DeferUpdates(file);
            await FileIO.WriteBytesAsync(file, buffer);
            CachedFileManager.CompleteUpdatesAsync(file);
        }

为什么这种方式比StorageFile的CopyAsync()方法更好? StorageFile 方法允许仅将文件写入 appxmanifest 中指定的文件夹。直接写入由 PickSaveFileAsync() 选择的文件允许在用户想要的任何位置创建文件(当然,如果他具有对该文件夹的写访问权限)。我检查了这个,它确实有效。 希望,如果其他开发人员遇到这个问题,这会对他们有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用FileSavePicker保存现有的StorageFile? 的相关文章

随机推荐

  • 如何通过两个属性对数组进行分组?

    Ex const arr group 1 question templateId 100 group 2 question templateId 200 group 1 question templateId 100 group 1 que
  • 根据字符宽度将字符串分成多行(python)

    我正在通过以下方式在基本图像上绘制文本PIL 要求之一是如果所有字符的组合宽度超过基本图像的宽度 则它会溢出到下一行 目前我正在使用textwrap wrap text width 16 来实现这一目标 这里width定义一行中容纳的字符数
  • 使用 SpannableStringBuilder 添加图像范围后,如何防止光标在 EditText (MultiAutoCompleteTextView) 中调整大小?

    这是我没有添加任何图像跨度芯片时一开始的样子 正如您所看到的 光标放置在正确的大小并且重力受到尊重 然后 当我添加图像跨度时 光标突然变大 如下所示 我不明白为什么会发生这种情况 也不知道如何解决它 即保持光标相同的大小 最后 当我再次开始
  • android textview settext显示空指针异常

  • Python 中的简单数据存储

    我正在寻找一种简单的解决方案 使用 Python 将数据存储为平面文件 这样每一行都是可以轻松解析的数组的字符串表示形式 我确信 python 有可以轻松完成此类任务的库 但到目前为止 我发现的所有方法似乎都很难让它工作 我确信有更好的方法
  • 拦截模块调用?

    我试图 拦截 对特定模块的所有调用 并将它们重新路由到另一个对象 我想这样做 以便我可以拥有一个相当简单的插件架构 例如 在 main py 中 import renderer renderer draw circle 在渲染器 py中 s
  • 导出Excel时如何消除空白行?

    当我将水晶报表导出到 Excel 文件时 它会在每个详细信息行后添加一个空白行 我尝试了很多解决方案 例如对齐字段 保持高度相似 对齐为基线 但它们都不起作用 您能否让我知道一个解决方案 以便不添加此类空白行 最后 我通过反复试验的方法得到
  • SQL 级函数是否可用于 LINQ to Entity 查询?

    我希望我可以编写调用其他函数的 LINQ to Entity 查询 from c in context Widgets where MyFunc c name select c 这会导致错误 因为表达式显然无法转换为调用 MyFunc 的
  • PHP 函数 ssh2_connect 不起作用

    以下是我的脚本
  • 如何使用Hamcrest来测试异常?

    我有以下代码 def f String s assert s contains 什么 Hamcrest 匹配器可用于测试断言 我知道我可以使用try catch块 但我更喜欢将测试的圈复杂度保持为 1 EDIT 如果你真的必须使用 Hamc
  • “resolve_variable”在 Django 中做什么? (“模板.变量”)

    什么是resolve variable做 我可以用它来访问request视野之外 Edit So template Variable是正确的方法 但我仍然不确定其目的 该文档并没有真正的帮助 干杯 伙计们 我假设您尝试在此处编写自定义模板标
  • 关闭 pyplot 窗口

    最终编辑 我在关闭 pyplot 窗口的主题上发现 它实际上可能不应该使用 pyplot 来完成 SRK 给出了一个关于如何处理绘图的很好的例子 这些例子将在下面的答案中更新 另外 我还偶然发现了如何将 pyplot 绘图放入 Tkinte
  • 如果没有循环,这个 JavaScript 问题是否可能实现?

    目前在代码提交网站上 它不会让我继续前进 使用此字符数组 将名称以 M 开头的每个字符打印到控制台 暂时不要使用任何类型的循环 var filmCharacters Vito Michael Sonny Freddo Mia Vincent
  • 如何声明一个可以被每个方法使用的变量? | C#

    我想问一下如何声明一个可以被所有方法使用的变量 我尝试将方法的访问类型公开 但这不允许我在其他方法中使用它的变量 此外 我基本上想通过不同的方法累积具有不同值的变量 这就是我问这个的原因 NOTE 我想避免创建任何静态类 EDIT 例如 我
  • 我如何知道 Flex DataGrid itemRenderer 中的按钮何时被单击?

    我有一个显示几列数据的 DataGrid 组件 它还有一个附加列 显示一个按钮 允许用户对记录执行操作
  • Pandas 中通过多个分隔符将一列拆分为多列

    给定一个数据框如下 player score 0 Sergio Ag ero Forward Manchester City 209 98 1 Eden Hazard Midfield Chelsea 274 04 2 Alexis S n
  • MongoDB-CR 身份验证失败

    我在验证用户身份时收到以下错误 purchase user purchase 失败 MongoDB CR 身份验证失败 当我通过浏览器访问 Web 服务时 用户文档中缺少凭据 但我能够从 mongo 验证 buy user 它返回 1 转到
  • 在 WooCommerce 中将爱尔兰的邮政编码结帐字段设置为必填字段

    在 WooCommerce 结帐页面中 我希望将邮政编码字段 爱尔兰爱尔兰代码 更改为必填字段 默认情况下 当所选国家 地区为爱尔兰时 这是可选字段 我只是想知道是否有办法将其更改为必填字段 并在 Eircode 旁边有一个小红星来表示它是
  • 如何在R中快速组合60个矩阵

    我在 R 中有 60 个矩阵 名为 mat1 mat2 mat60 我想使用 rbind 将它们组合成一个大矩阵 我知道我可以写一些类似的东西 matList lt list mat1 mat2 mat60 rbind matList 但这
  • 如何使用FileSavePicker保存现有的StorageFile?

    我正在尝试将现有文件保存到另一个地方 这是某种副本 但我想允许用户使用 FileSavePicker 选择新的目的地 这是我的代码 StorageFile currentImage await StorageFile GetFileFrom