2012-02-08 3 views
4

Je débute en programmation C#/WPF/Surface.Supprimer des fichiers qui ont été utilisés dans un C# LibraryStack dans un Scatterview

J'utilise un LibraryStack dans un ScatterViewItem dans un 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 [email protected]}"/> 
     </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> 

Je remplir la pile Bibliothèque en définissant un ObservableCollection au ItemsSource du LibraryStack. Le ObservableCollection est constitué de chaînes, qui sont des chemins d'accès aux images.

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

Maintenant, j'ai un ScatterViewItem avec toutes les images en elle avec le glisser-déposer.

Ensuite, je veux effacer toutes les images du LibraryStack/ScatterViewItem et supprimer tous les fichiers/images dans le dossier:

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); 
    } 
} 

Le ScatterViewItem à l'écran est vide, mais il y a AllWays une exception levée, en supprimant les fichiers (File.Delete(file)):

System.IO.IOException: le processus ne peut pas accéder au fichier « xyz », car il est utilisé par un autre autre processus. à System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) à System.IO.File.Delete (chemin String) ...

Suppression sur FileInfo lance la même exception.

Que dois-je faire?

Répondre

0

Essayez de modifier les attributs du fichier avant de les supprimer.

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

C'est peu susceptible d'aider, il ressemble à un problème de verrouillage de fichier non un problème d'autorisations de fichiers –

0

Je vois deux explications possibles: -

  1. Un autre processus a un verrou sur le fichier (je trouve souvent onedrive verrouille mon code pour synchroniser). Essayez d'utiliser Process Explorer pour voir ce qui a un verrou sur le fichier (s)
  2. Vous verrouillage par inadvertance les fichiers quelque part dans votre code et vous bloquant
Questions connexes