删除已在Scatterview中的C#LibraryStack中使用的文件

时间:2012-02-08 08:37:17

标签: c# wpf file-io pixelsense scatterview

我是C#/ WPF / Surface编程的新手。

我在LibraryStack的{​​{1}}中使用了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的{​​{1}}来填充图书馆堆栈。 ItemsSource由字符串组成,字符串是图像的文件路径。

LibraryStack

现在我有一个ObservableCollection,其中包含拖放的所有图像。

然后我要清除ObservableCollection<string> oc = new ObservableCollection<string>(System.IO.Directory.GetFiles(folder)); LibraryStack1.ItemsSource = ocs; / ScatterViewItem中的所有图片并删除文件夹中的所有文件/图片:

LibraryStack

屏幕上的ScatterViewItem为空,但通过删除文件(ScatterViewItem)总会抛出异常:

  

System.IO.IOException:进程无法访问文件'xyz',因为它正由另一个进程使用。在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO.File.Delete(String path)...

删除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); } } 会引发相同的异常。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

在删除之前尝试更改这样的文件属性。

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

答案 1 :(得分:0)

我看到两种可能的解释: -

  1. 另一个进程锁定了文件(我发现OneDrive经常锁定我的代码来同步它)。尝试使用Process Explorer查看文件锁定的内容
  2. 您无意中将文件锁定在代码中的某处并阻止自己