如何在 C# 中不使用 RequestAddFolderAsync 将文件夹添加到 StorageLibrary
How to add folder to StorageLibrary without RequestAddFolderAsync in C#
我需要将应用程序文件保存到插入的 SD 卡中。我正在使用 UWP 和 Windows 10.
MSDN 讲述了 to do it 如何使用 Windows 库。
var myPicsLibrary = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
await myPicsLibrary.RequestAddFolderAsync();
RequestAddFolderAsync()
显示文件选择器,用户可以在其中选择要添加到图片中的文件夹。在我的例子中,它是一个在 SD 卡上创建的文件夹。
有没有办法在没有文件选择器对话框的情况下做这件事?
我正在尝试 like this:
var myPicsLibrary = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
// Get the logical root folder for all external storage devices.
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
// Get the first child folder, which represents the SD card.
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();
var folder = await sdCard.CreateFolderAsync("MySDCardFolder");
myPicsLibrary.Folders.Insert(myDocs.Folders.Count+1, folder); // NotImplementedException: 'The method or operation is not implemented.'
myPicsLibrary.Folders.Add(folder); // NotImplementedException: 'The method or operation is not implemented.'
或者我可以不使用直接与 SDCard
一起工作的 Windows 库来做同样的事情?
非常感谢!
编辑:
另一方面,我的问题听起来像 "How to save files to plugged SD card?"
根据你的问题,你需要在 PicturesLibrary 中创建一个文件夹。
您可以使用下面的代码将文件夹添加到 PicturesLibrary
await Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("MySDCardFolder");
如果您只想将其制作在 SD 卡上也许 KnownFolders.RemovableDevices
应该会有帮助。我还没有使用 KnownFolders.RemovableDevices
,但如果您有任何问题,请告诉我直接在我的 phone 上进行测试
StorageLibrary.Folders
获取当前库中的文件夹,returnIObservableVector
StorageFolder
。当我们将文件夹添加到 IObservableVector
时,它不会更改文件系统中的文件夹。它将抛出 "The method or operation is not implemented." 异常。
我们应该能够获取文件夹的名称,并使用该名称创建文件夹。然后我们可以StorageFile.CopyAsync
方法复制你文件夹里的文件。
例如:
public static async Task CopyFolderAsync(StorageFolder source, StorageFolder destinationContainer, string desiredName = null)
{
StorageFolder destinationFolder = null;
destinationFolder = await destinationContainer.CreateFolderAsync(
desiredName ?? source.Name, CreationCollisionOption.ReplaceExisting);
foreach (var file in await source.GetFilesAsync())
{
await file.CopyAsync(destinationFolder, file.Name, NameCollisionOption.ReplaceExisting);
}
foreach (var folder in await source.GetFoldersAsync())
{
await CopyFolderAsync(folder, destinationFolder);
}
}
然后我们就可以使用CopyFolderAsync
的方法来复制图片库中的文件夹了
var myPicsLibrary = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
var myfolder = myPicsLibrary.Folders[0];
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();
var folder = await sdCard.CreateFolderAsync("MySDCardFolder");
await CopyFolderAsync(folder, myfolder);
我需要将应用程序文件保存到插入的 SD 卡中。我正在使用 UWP 和 Windows 10.
MSDN 讲述了 to do it 如何使用 Windows 库。
var myPicsLibrary = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
await myPicsLibrary.RequestAddFolderAsync();
RequestAddFolderAsync()
显示文件选择器,用户可以在其中选择要添加到图片中的文件夹。在我的例子中,它是一个在 SD 卡上创建的文件夹。
有没有办法在没有文件选择器对话框的情况下做这件事?
我正在尝试 like this:
var myPicsLibrary = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
// Get the logical root folder for all external storage devices.
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
// Get the first child folder, which represents the SD card.
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();
var folder = await sdCard.CreateFolderAsync("MySDCardFolder");
myPicsLibrary.Folders.Insert(myDocs.Folders.Count+1, folder); // NotImplementedException: 'The method or operation is not implemented.'
myPicsLibrary.Folders.Add(folder); // NotImplementedException: 'The method or operation is not implemented.'
或者我可以不使用直接与 SDCard
一起工作的 Windows 库来做同样的事情?
非常感谢!
编辑:
另一方面,我的问题听起来像 "How to save files to plugged SD card?"
根据你的问题,你需要在 PicturesLibrary 中创建一个文件夹。 您可以使用下面的代码将文件夹添加到 PicturesLibrary
await Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync("MySDCardFolder");
如果您只想将其制作在 SD 卡上也许 KnownFolders.RemovableDevices
应该会有帮助。我还没有使用 KnownFolders.RemovableDevices
,但如果您有任何问题,请告诉我直接在我的 phone 上进行测试
StorageLibrary.Folders
获取当前库中的文件夹,returnIObservableVector
StorageFolder
。当我们将文件夹添加到 IObservableVector
时,它不会更改文件系统中的文件夹。它将抛出 "The method or operation is not implemented." 异常。
我们应该能够获取文件夹的名称,并使用该名称创建文件夹。然后我们可以StorageFile.CopyAsync
方法复制你文件夹里的文件。
例如:
public static async Task CopyFolderAsync(StorageFolder source, StorageFolder destinationContainer, string desiredName = null)
{
StorageFolder destinationFolder = null;
destinationFolder = await destinationContainer.CreateFolderAsync(
desiredName ?? source.Name, CreationCollisionOption.ReplaceExisting);
foreach (var file in await source.GetFilesAsync())
{
await file.CopyAsync(destinationFolder, file.Name, NameCollisionOption.ReplaceExisting);
}
foreach (var folder in await source.GetFoldersAsync())
{
await CopyFolderAsync(folder, destinationFolder);
}
}
然后我们就可以使用CopyFolderAsync
的方法来复制图片库中的文件夹了
var myPicsLibrary = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
var myfolder = myPicsLibrary.Folders[0];
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();
var folder = await sdCard.CreateFolderAsync("MySDCardFolder");
await CopyFolderAsync(folder, myfolder);