【问题标题】:How to write a file without prompt a window that asks where to store it in C++/CX?如何在不提示窗口询问将文件存储在 C++/CX 中的位置的情况下编写文件?
【发布时间】:2022-01-20 19:50:07
【问题描述】:

通常,当我们想要存储文件时,我们会打开一个 FileSavePicker,例如:

auto savePicker = ref new FileSavePicker();
savePicker->SuggestedStartLocation = PickerLocationId::PucturesLibrary;
savePicker->FileTypeChoices->Insert("Gif", ref new Vector<String^>({".gif"}));
savePicker->SuggestedFileName = "File1";
create_task(...); // Save file async here.

但我想做的是它自动将文件保存在本地文件夹中,而不询问存储位置,文件名称是什么等等。 顺便说一下,以异步方式,例如:

inkCanvas->InkPresenter->StrokeContainer->SaveAsync(stream);

我应该怎么做才能创建一个文件,然后将其作为流读取?

【问题讨论】:

  • 我确定它是 C++/CX。因为 Windows Ink 仅在有限的场景中受支持。
  • 关于这个问题的任何更新?

标签: uwp c++-cx


【解决方案1】:

如果您想在没有窗口对话框的情况下保存文件,那么 FileSavePicker 不适合您。如果我理解正确,您真正想做的是直接创建一个文件,以便您可以将数据保存到该文件中。

最简单的方法是你需要获取一个代表目标文件夹的StorageFolder对象。然后你可以打电话给StorageFolder.CreateFileAsync。此 API 将创建一个文件,并且不会提示对话框。

如果目标文件夹是 Vidoe、Document 等已知文件夹,则只需调用KnownFolders Class

像这样:

StorageFile file = await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("ink.gif", CreationCollisionOption.ReplaceExisting);

如果目标文件夹是 UWP 应用默认无权访问的地方,那么您可能需要查看 broadFileSystemAccess 功能。此受限功能使您的应用程序能够获得与当前运行应用程序的用户相同的文件系统访问权限,而在运行时无需任何额外的文件选择器样式提示。此功能仅适用于 Windows.Storage namespace 中的 API。

那么你可以这样使用它:

  var folder = await StorageFolder.GetFolderFromPathAsync(folderPath);
  var file = await folder.CreateFileAsync("ink.gif", CreationCollisionOption.ReplaceExisting);

更多关于UWP中文件系统权限的信息,请参考:File permission

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多