UWP копирует несколько файлов из ресурсов в указанное место - PullRequest
0 голосов
/ 07 октября 2019

Итак, я сделал это так далеко:

private async void DownloadButton_Click(object sender, RoutedEventArgs e)
   {
    // Pick a location to create new folder in.

    FolderPicker picker = new FolderPicker { SuggestedStartLocation = PickerLocationId.Downloads };
    picker.FileTypeFilter.Add("*");
    StorageFolder folder = await picker.PickSingleFolderAsync();

    // Create new folder with "custom name" + replaces existing.

    var projectFolderName = "New Folder 2";
    StorageFolder projectFolder = await folder.CreateFolderAsync(projectFolderName, CreationCollisionOption.ReplaceExisting);

    //Pick a file to be copied

    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/NewFolder1/File1.png"));
    StorageFile file2 = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/File2.png"));

    //Paste copied file in custom folder.

    await file.CopyAsync(projectFolder, "File1.png");
    await file2.CopyAsync(projectFolder, "File2.png");
    }
  }
}

Что я не могу понять, как получить все файлы одновременно и скопировать их все вместе.

IМожно написать новую строку копирования / вставки для каждого существующего файла, но должен быть более простой способ собрать все это вместе.

Спасибо?

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

большое спасибо! Это действительно очень помогло, но.

Я должен ответить на свой вопрос, когда я настроил ваш твик, чтобы точно узнать, куда я направлялся.

private async void DownloadButton_Click(object sender, RoutedEventArgs e)
        {
            // Pick a location to create new folder in.
            FolderPicker picker = new FolderPicker { SuggestedStartLocation = PickerLocationId.Downloads };
            picker.FileTypeFilter.Add("*");
            StorageFolder folder = await picker.PickSingleFolderAsync();

            // Create new folder with "custom name" + replaces existing.

            var projectFolderName = "New Folder 2";
            StorageFolder projectFolder = await folder.CreateFolderAsync(projectFolderName, CreationCollisionOption.ReplaceExisting);

            // Copy all files from assets folder and paste to destination.
            StorageFolder assetsFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(@"Assets\NewFolder1");

            foreach (StorageFile assetFile in await assetsFolder.GetFilesAsync())
            {
                await assetFile.CopyAsync(projectFolder");
            }
        }

Мне действительно нужна папка внутри папки «Активы» (@"Assets\NewFolder1");

И await assetFile.CopyAsync(projectFolder, $"{Guid.NewGuid().ToString()}.png");

На самом деле все файлы в этой папке сохранены в виде файлов ".png" со случайными именами, такими как "1234-456-789"

Поэтому было заменено наawait assetFile.CopyAsync(projectFolder); Чтобы сохранить все с оригинальными расширениями и именами.

Вот и все!

Еще раз спасибо! х]

0 голосов
/ 08 октября 2019

Что я не могу понять, как получить все файлы одновременно и скопировать их все вместе.

Вот один из способов добиться этого с помощью вашего кода:

Сначала вам нужно получить папку Assets (Source).

Вы сможете сделать это, используя следующую строку:

StorageFolder assetsFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(@"Assets");

Затем перечислите файлы из Sourceи скопировать в указанную папку (место назначения)

 foreach (StorageFile assetFile in await assetsFolder.GetFilesAsync())
 {
     await assetFile.CopyAsync(projectFolder, $"{Guid.NewGuid().ToString()}.png");
 }

Вот измененный код:

private async void DownloadButton_Click(object sender, RoutedEventArgs e)
        {
            // Pick a location to create new folder in.
            FolderPicker picker = new FolderPicker { SuggestedStartLocation = PickerLocationId.Downloads };
            picker.FileTypeFilter.Add("*");
            StorageFolder folder = await picker.PickSingleFolderAsync();

            // Create new folder with "custom name" + replaces existing.

            var projectFolderName = "New Folder 2";
            StorageFolder projectFolder = await folder.CreateFolderAsync(projectFolderName, CreationCollisionOption.ReplaceExisting);

            // Copy all files from assets folder and paste to destination.
            StorageFolder assetsFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(@"Assets");

            foreach (StorageFile assetFile in await assetsFolder.GetFilesAsync())
            {
                await assetFile.CopyAsync(projectFolder, $"{Guid.NewGuid().ToString()}.png");
            }
        }
...