升级到windows fall创建我的应用程序有问题,当删除文件时,它给了我一个例外:
System.IO.FileLoadException:'进程无法访问该文件,因为它正由另一个进程使用。 (来自HRESULT的异常:0x80070020)'
首先将文件复制到我的目录然后删除:
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
if (e.Parameter != null)
{
folder = ApplicationData.Current.LocalFolder;
this.myfile= e.Parameter as MyFile;
this.view = await this.myfile.CopyAsync(folder, this.myfile.Name, NameCollisionOption.ReplaceExisting);
}
}
之前离开视图:
protected override async void OnNavigatedFrom(NavigationEventArgs e)
{
await this.view.DeleteAsync();
}
在Windows创建中更新此工作,在windows fall创建更新中无效。
更新: 我已经分析了错误,这是由于使用了PdfDocument库。
var folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync("temp.pdf");
using (IRandomAccessStream filestream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
}
var pdfDocument = await PdfDocument.LoadFromFileAsync(file);
using (IRandomAccessStream filestream1 = await file.OpenAsync(FileAccessMode.ReadWrite))
{
}
答案 0 :(得分:0)
仅当我使用OpenAsync(文件访问模式.ReadWrite)打开文件时才会发生错误; ,如果我用同一个文件打开视图两次,我会收到错误
如果您的意思是打开文件两次而不处理第一个流,如下面的代码片段所示,它会抛出您在线程中描述的异常。
await temp.OpenAsync(FileAccessMode.ReadWrite);
await temp.OpenAsync(FileAccessMode.ReadWrite);
也许我需要一种关闭文件的方法?
如您所述,您需要调用dispose方法以允许将Stream使用的资源重新分配用于其他目的。在调用dispose方法之前,流不会自动释放,因此您无法再次打开文件流。例如,您应该将代码段更新为:
StorageFile temp = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting);
IRandomAccessStream stream = await temp.OpenAsync(FileAccessMode.ReadWrite);
stream.Dispose();
IRandomAccessStream streamtwice= await temp.OpenAsync(FileAccessMode.ReadWrite);
streamtwice.Dispose();
Using statement提供了一种方便的语法,可确保正确使用IDisposable
个对象。建议使用using语句,代码如下:
StorageFile temp = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream stream = await temp.OpenAsync(FileAccessMode.ReadWrite))
{
}