2015-10-05 43 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你實際上鎖定這個文件,所以沒有其他線程可以觸摸它,直到它關閉。

盧卡的答案似乎很好,也很安全。嘗試使用它。