Удаление файлов, которые использовались в C# LibraryStack в Scatterview

Я новичок в программировании на С#/WPF/Surface.

Я использую LibraryStack в ScatterViewItem в ScatterView:

<Grid Name="DataGrid" Background="LightBlue" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <Grid.Resources>
        <DataTemplate x:Key="LibraryItemTemplate">
            <Viewbox Stretch="Uniform">
                <Image Source="{Binding}" />
            </Viewbox>
        </DataTemplate>

        <!-- Styles to ensure each library control uses the above defined templates -->
        <Style TargetType="{x:Type s:LibraryStack}">
            <Setter Property="ItemTemplate" Value="{StaticResource LibraryItemTemplate}"/>
        </Style>
        <Style TargetType="{x:Type s:LibraryBar}">
            <Setter Property="ItemTemplate" Value="{StaticResource LibraryItemTemplate}"/>
        </Style>

        <DataTemplate x:Key="itemTemplate">
            <Image Source="{Binding XPath=@FullPath}"/>
        </DataTemplate>
    </Grid.Resources>
    <s:ScatterView HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <s:ScatterViewItem  Name="ScatterViewItem1" Background="DarkGray"   MinWidth="800" MinHeight="800" 
                             Orientation="0.0" CanRotate="False">
            <s:LibraryStack Name="LibraryStack1" Background="Transparent" MinWidth="800" MinHeight="800" AllowDrop="True" >

            </s:LibraryStack>
        </s:ScatterViewItem>
    </s:ScatterView>
</Grid>

Я заполняю библиотечный стек, устанавливая ObservableCollection на ItemsSource из LibraryStack. ObservableCollection состоит из строк, которые являются путями файлов к изображениям.

ObservableCollection<string> oc = new ObservableCollection<string>(System.IO.Directory.GetFiles(folder));
LibraryStack1.ItemsSource = ocs;

Теперь у меня есть ScatterViewItem со всеми изображениями, которые можно перетаскивать.

Затем я хочу очистить все изображения из LibraryStack/ScatterViewItem и удалить все файлы/изображения в папке:

oc=null;
LibraryStack1.ItemsSource = null;
string[] files = Directory.GetFiles(folder);

foreach (String file in files)
{
  try
  {
    File.Delete(file);
  }
  catch (Exception f)
  {
    Console.WriteLine(f);
  }
}

ScatterViewItem на экране пуст, но всегда возникает исключение при удалении файлов (File.Delete(file)):

System.IO.IOException: процесс не может получить доступ к файлу «xyz», поскольку он используется другим процессом. в System.IO.__Error.WinIOError (код ошибки Int32, строка, возможно, полный путь) в System.IO.File.Delete (путь строки) ...

Удаление более FileInfo вызывает такое же исключение.

Что я должен делать?


person fabschu    schedule 08.02.2012    source источник


Ответы (2)


Попробуйте изменить атрибуты файла, как это, прежде чем удалять их.

File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
person Pabinator    schedule 23.06.2014
comment
Это вряд ли поможет, похоже, проблема с блокировкой файла, а не с правами доступа к файлу. - person David Hayes; 23.06.2014

Я вижу два возможных объяснения: -

  1. Другой процесс блокирует файл (я обнаружил, что OneDrive часто блокирует мой код для его синхронизации). Попробуйте использовать Process Explorer, чтобы узнать, какие файлы заблокированы. )
  2. Вы непреднамеренно блокируете файлы где-то в своем коде и блокируете себя
person David Hayes    schedule 23.06.2014