Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 16.07.2017, 12:02   #1
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
Репутация: 10
По умолчанию [UWP] Процесс не может получить доступ к файлу, так как этот файл занят другим процессом

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

Код:

if (gridView.SelectedItem != null)
                        {
                            StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Migrations\\ImageGalery");
                            
                   
                            StorageFile file = await folder.GetFileAsync(listEvaluate[gridView.SelectedIndex].name);
                           
                            listEvaluate.Clear();
                            gridView.ItemsSource = listEvaluate;
                            await file.DeleteAsync();
                            this.Loaded += Page_Loaded;
                        }

Mukudori вне форума   Ответить с цитированием
Старый 19.07.2017, 12:16   #2
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
Репутация: 10
По умолчанию

В коде видно, что я очищаю все листы, к которым привязывал Uri-ссылку файла и цепляю к гриду уже очищенный лист.

вот представление класса листа:

Код:

public class Evaluate // Класс строки в listview
    {
        public int id { get; set; }
        public string name { get; set; }
        public string JQ { get; set; }
        public string Blur { get; set; }
        public bool Check { get; set; }
        public Uri imageSource { get; set; } // ссылка на изображение

        public Evaluate(string _name, string jq, string blur, Uri source)
        {
            name = _name;
            id = Convert.ToInt32(GlobalFuncs.GetFormatAndNameFromString(name)[0]);
            JQ = jq;
            Blur = blur;
            imageSource = source;
        }

    }


Между страницами я перемещаюсь вот так:
Код:

    Frame.Novigate(typeof(<страница>));

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


Задача самая наипростейшая для тех, кто работает с этой платформой, я не понимаю почему мне до сих пор никто не отвечает.

Последний раз редактировалось Mukudori; 19.07.2017 в 12:19.
Mukudori вне форума   Ответить с цитированием
Старый 28.07.2017, 16:06   #3
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
Репутация: 10
По умолчанию

Ладно, напишу по-подробней.

Вот XAML код

Код:

 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="10*"/>
            <RowDefinition Height="80*"/>
            <RowDefinition Height="20*"/>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="80*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Grid.Row="0" Text="Галерея изображений" HorizontalAlignment="Center" VerticalAlignment="Center" />

       

        <GridView x:Name="gridView" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" SelectionChanged="gridView_SelectionChanged">
            <GridView.ItemTemplate>
                <DataTemplate >
                    <Grid >
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition/>
                            <RowDefinition/>
                            
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>


                        <Image Grid.Column="0" Grid.RowSpan="3" Margin="10" Source="{Binding image }" Height="100" Width="100">
                            <Image.ContextFlyout>
                                <Flyout x:Name="dialogBox">
                                    <Flyout.Content>
                                        <StackPanel>
                                            <TextBlock Text="Удалить изображение?" />
                                            <Button Click="Button_Click" Content="OK" Margin="0 10 0 0" />
                                        </StackPanel>
                                    </Flyout.Content>
                                </Flyout>
                            </Image.ContextFlyout>
                        </Image>
                        <TextBlock Grid.Column="1" Grid.Row="0" Margin="10" Text="Идентефикатор" FontWeight="Normal" VerticalAlignment="Center" FontSize="14" />
                        <TextBlock Grid.Column="1" Grid.Row="0" Margin="10,45,10,10" Text="{Binding id }" FontWeight="Bold" VerticalAlignment="Center" FontSize="14" />
                        <TextBlock Grid.Column="1" Grid.Row="1" Margin="10" Text="Мера сжатия" FontWeight="Normal" VerticalAlignment="Center" FontSize="14" />
                        <TextBlock Grid.Column="1" Grid.Row="1" Margin="10,45,10,10" Text="{Binding JQ }" FontWeight="Bold" VerticalAlignment="Center" FontSize="14" />
                        <TextBlock Grid.Column="1" Grid.Row="2" Margin="10" Text="Мера размытия" FontWeight="Normal" VerticalAlignment="Center" FontSize="14" />
                        <TextBlock Grid.Column="1" Grid.Row="2" Margin="10,45,10,10" Text="{Binding Blur }" FontWeight="Bold" VerticalAlignment="Center" FontSize="14" />
                        
                    </Grid>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>
    </Grid>

    <Page.BottomAppBar>
        <CommandBar>
            <AppBarButton x:Name="ViewButton" Label="Показать изображение" Icon="View" Click="ViewImageClick"/>
            <AppBarButton x:Name="DeleteButton" Label="Удалить фото" Icon="Delete" Click="DeleteClick"/>
            <AppBarButton x:Name="BackButton" Label="Назад в меню" Icon="Back" Click="BackClick"/>
        </CommandBar>
    </Page.BottomAppBar>

Вот попытка привязать к гриду лист из класса, который я описал выше

Код:

private async void Page_Loaded()
        {

            StorageFolder folderImages;
            folderImages = await Package.Current.InstalledLocation.GetFolderAsync(GlobalFuncs.GetLocalFolder());
            fileList = await folderImages.GetFilesAsync();         
            GetFiles();            
            string JQ, Blur;            
       
                for (int i = 0; i < fileList.Count; i++)
                {
                    JQ = "0";
                    Blur = "0";
                    int id;                  

                listEvaluate.Add(new EvaluateTest(fileList[i].Name, JQ, Blur, new Uri(GlobalFuncs.GetLocalFolder(true, true) + fileList[i].Name)));
                }                
            gridView.ItemsSource = listEvaluate;
            fileList = null;            
        }

После того, как отработает этот метод я пытаюсь удалить ту картинку, которую выберу в гриде

Код:

  private async void DeleteImage()
        {
            StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync(GlobalFuncs.GetLocalFolder());          


            string name = listEvaluate[gridView.SelectedIndex].name;
            listEvaluate.Clear();          
            gridView.ItemsSource = null;
            StorageFile file = await folder.GetFileAsync(name);
            folder = null; 
            await file.DeleteAsync(); // О Ш И Б К А
        }

И все, больше ничего лишнего нет, но удалить файл я не могу, даже если перейду на другую страницу. Но если при запуске приложения ничего не делать с этим файлом то он прекрасно удаляется
Mukudori вне форума   Ответить с цитированием
Старый 28.07.2017, 16:18   #4
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
Репутация: 10
По умолчанию

Или напишите свой небольшой пример как привязать к гриду картинку и удалить выбранную.
Mukudori вне форума   Ответить с цитированием
Старый 04.08.2017, 01:38   #5
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
Репутация: 10
По умолчанию

Понятно все с вами, ничего вы не знаете. Не могли мне подсказать элементарнейшие вещи о том каким образом я должен работать с файлами.

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

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

Код:

public class EvaluateTest // Класс строки в listview
    {
        public int id { get; set; }
        public string name { get; set; }
        public string JQ { get; set; }
        public string Blur { get; set; }
        public bool Check { get; set; }
        public BitmapImage image { get; set; }

        private  async void GetImage(string path)
        {
            RandomAccessStreamReference rs = RandomAccessStreamReference.CreateFromUri(new Uri(path));
            BitmapImage bi = new BitmapImage();
            var rstream = await rs.OpenReadAsync();
            bi.SetSource(rstream);
            image = bi;
        }

        public EvaluateTest(string _name, string jq, string blur, string path)
        {
            name = _name;
            id = Convert.ToInt32(GlobalFuncs.GetFormatAndNameFromString(name)[0]);
            JQ = jq;
            Blur = blur;
            GetImage(path);
        }

        ~EvaluateTest()
        {
            image = null;
        }

    }

Mukudori вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файл занят другим процессом muk07 C++ Builder 3 23.09.2015 18:46
Файл занят другим процессом vovaza29 C# (си шарп) 5 26.08.2015 14:48
Процесс не может получить доступ к файлу mihalech19 C++ Builder 14 06.07.2014 13:38
Этот файл занят другим процессом alkador Общие вопросы Delphi 5 26.06.2012 21:27
Файл занят другим процессом Adonidi Общие вопросы Delphi 4 25.03.2010 22:38




01:31.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru