c# - 如何关闭打开的StorageFile?

标签 c# .net windows-runtime windows-phone-8.1 windows-phone

我正在编写一个Windows Phone 8.1 (WINRT XAML) 应用

在方法 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))

最佳答案

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

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

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

关于c# - 如何关闭打开的StorageFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32948609/

相关文章:

windows-runtime - 在 C++/CX 中实现内部接口(interface)的公共(public)引用类

interop - 为什么 WinRT 类型必须密封?

c# - 获取 Azure Blob 存储中的最后一个 Blob

c# - 在 DesignMode 中编辑集合的最简单方法?

c# - 如何从 T-SQL 转换 Sum over partition

.net - 将音频文件WCF发送到WP7

.net - WCF,发布 JSON 化数据

c# - WPF 中的 SaveFileDialog 错误

windows-8 - 从使用 WinJS 读取的文件返回值以在页面中使用

c# - 在运行时生成接口(interface)实现