Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2017, 11:02   #1
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию [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, 11:16   #2
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию

В коде видно, что я очищаю все листы, к которым привязывал 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 в 11:19.
Mukudori вне форума Ответить с цитированием
Старый 28.07.2017, 15:06   #3
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию

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

Вот 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, 15:18   #4
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию

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

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

Судя по всему для работы с файлом в данном случае необходимо создавать отдельный поток в котором мы создаем переменную типа 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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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