Удаление файлов, которые использовались в C # LibraryStack в Scatterview - PullRequest
4 голосов
/ 08 февраля 2012

Я новичок в C # / WPF / Программирование поверхностей.

Я использую 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 errorCode, String MaybeFullPath) в System.IO.File.Delete (String path) ...

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

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 23 июня 2014

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

  1. Другой процесс заблокировал файл (я считаю, что OneDrive часто блокирует мой код для его синхронизации). Попробуйте использовать Process Explorer , чтобы увидеть, что блокирует файл (ы)
  2. Вы случайно блокируете файлы где-то в своем коде и блокируете себя
0 голосов
/ 23 июня 2014

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

File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
...