2015-10-05 44 views
2

我正在编写一个Windows Phone 8.1(WINRT XAML)应用程序如何关闭打开的StorageFile?

在方法1中,我打开一个StorageFile,并在方法2中写入同一个文件中的。但是在写入文件时显示错误。

  1. 如何打开和阅读内容后关闭此文件?
  2. 那么如何在写入方法2之后再次关闭此文件?

    private async Task<bool> Method1(int workOutID) 
    { 
        string filename = "WorkoutOfflineDataFile.txt"; 
        StorageFolder LocalStorageFolderObject = ApplicationData.Current.LocalFolder; 
        StorageFile StorageFileObject = await LocalStorageFolderObject.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); 
        string JSONFromFile = await FileIO.ReadTextAsync(StorageFileObject); 
    } 
    
    private async void Method2() 
    { 
        string filename = "WorkoutOfflineDataFile.txt"; 
        StorageFolder LocalStorageFolderObject = ApplicationData.Current.LocalFolder; 
        StorageFile StorageFileObject = await LocalStorageFolderObject.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); 
        await FileIO.WriteTextAsync(StorageFileObject, JSonData_ToSave); 
    } 
    

ERROR:

Exception thrown: 'System.UnauthorizedAccessException' in mscorlib.ni.dll

Additional information: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

+0

请将您的代码粘贴到代码块中。现在它不可读。 – Festyk

+0

@Festyk,请立即检查 –

+0

您打算如何调用这些方法? –

回答

0

不Festyk的解决方案的工作?也许只是试着用:

StorageFile StorageFileObject = await LocalStorageFolderObject.GetFileAsync(filename); 

在你的第二种方法中,如果你确定文件已经存在 - 记住,否则它会抛出一个异常。

+0

WorkoutOfflineDataFile.txt在第一个方法中打开。我不知道如何关闭它的处理程序。它不在method2中打开。显示,UnauthorizedAccessException –

1

代码似乎是正确的,我认为异常是由其他东西引发的。

无论如何,如果你想,以确保您的文件和数据流的读/写操作后关闭,您可以用一次性方式:

private async Task<bool> Method1(int workOutID) 
{ 
    string filename = "WorkoutOfflineDataFile.txt"; 
    StorageFolder LocalStorageFolderObject = ApplicationData.Current.LocalFolder; 
    StorageFile StorageFileObject = await LocalStorageFolderObject.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); 
    using (var stream = await StorageFileObject.OpenStreamForReadAsync()) 
    { 
     using (var reader = new StreamReader(stream)) 
     { 
      string JSONFromFile = reader.ReadToEnd(); 
     } 
    } 
} 

private async void Method2() 
{ 
    string filename = "WorkoutOfflineDataFile.txt"; 
    StorageFolder LocalStorageFolderObject = ApplicationData.Current.LocalFolder; 
    StorageFile StorageFileObject = await LocalStorageFolderObject.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); 
    using (var stream = await StorageFileObject.OpenStreamForWriteAsync()) 
    { 
     using (var writer = new StreamWriter(stream)) 
     { 
      writer.Write(JSonData_ToSave); 
     } 
    } 
} 
0

你锁定在方法1文件()

private async Task<bool> Method1(int workOutID) 
{ 
    string filename = "WorkoutOfflineDataFile.txt"; 
    StorageFolder LocalStorageFolderObject = ApplicationData.Current.LocalFolder; 
    StorageFile StorageFileObject = await LocalStorageFolderObject.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); 
    string JSONFromFile = await FileIO.ReadTextAsync(StorageFileObject); 
} 

当你试图访问WorkoutOfflineDataFile.txt你实际上锁定这个文件,所以没有其他线程可以触摸它,直到它关闭。

卢卡的答案似乎很好,也很安全。尝试使用它。