Метод CopyAsync не заменяет существующий файл. UWP. Применение-хранения - PullRequest
0 голосов
/ 08 апреля 2019

Сейчас я работаю над операцией редактирования в моем приложении. Таким образом, в операции редактирования есть возможность изменить изображение, и в то же время имя файла, в котором хранится изображение контакта, не может быть переименовано (в течение одного сеанса работы файлы изображений будут меняться, но весь этот файл будет иметь одно и то же имя) .

И я использовал перегрузку метода CopyAsync (документы для этого метода здесь ), который, как я понимаю, должен заменить файл на существующий файл с тем же именем.

Я получаю imageFile переменную FileOpenPicker. Код ниже запускается каждый раз, когда я выбираю изображение по FileOpenPicker. И когда я снова выбираю изображение в результате Image Управление пользовательским интерфейсом показывает мне предыдущее выбранное изображение. Я ожидаю, что Image будет просматривать последнее выбранное мной изображение, но этого не произошло.

    public BitmapImage Image { set; get; }

    //Copy of the file that saved in temporary storage
    StorageFile fileForView = await imageFile.CopyAsync 
       (ApplicationData.Current.TemporaryFolder,
       fileName,
       NameCollisionOption.ReplaceExisting);

    Image = new BitmapImage(new Uri(fileForView.Path));

Возможно, я неправильно понимаю логику метода CopyAsync, если я в этом случае, пожалуйста, покажите мне, как заставить мой план работать с этим методом, если это возможно. В противном случае предложите свое решение, потому что я не знаю, как это сделать.

Также я пытался сделать это методом CopyAndReplaceAsync. Но до сих пор нет результата. Я делаю это так:

         if (null != await ApplicationData.Current.TemporaryFolder.TryGetItemAsync(fileName))
        {
            StorageFile storageFile = await ApplicationData.Current.TemporaryFolder.GetFileAsync(fileName);

            await storageFile.CopyAndReplaceAsync(imageFile);
        }

1 Ответ

0 голосов
/ 09 апреля 2019

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

Вышеуказанный CopyAsync метод верен, и я протестировал следующий код, он хорошо работает.

private async void ListOption_ItemClick(object sender, ItemClickEventArgs e)
{
    FileOpenPicker openPicker = new FileOpenPicker();
    openPicker.ViewMode = PickerViewMode.Thumbnail;
    openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
    openPicker.FileTypeFilter.Add(".jpg");
    openPicker.FileTypeFilter.Add(".jpeg");
    openPicker.FileTypeFilter.Add(".png");

    StorageFile file = await openPicker.PickSingleFileAsync();
    if (file != null)
    {
        StorageFile fileForView = await file.CopyAsync(ApplicationData.Current.TemporaryFolder, file.Name, NameCollisionOption.ReplaceExisting);
        Image = new BitmapImage(new Uri(fileForView.Path));
        TestImg.Source = Image;
    }
    else
    {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...