【问题标题】:Read a file in WinRT class library读取 WinRT 类库中的文件
【发布时间】:2013-06-11 02:04:49
【问题描述】:

在一个 Windows 应用商店应用项目中,我正在阅读这样的文件:

var uri = new Uri("ms-appx:///DataModel/Accounts.csv");
var file = await StorageFile.GetFileFromApplicationUriAsync(uri);

var read = await FileIO.ReadTextAsync(file);

文件Accounts.csv 添加了构建操作content

我现在已将代码移至单独的类库。文件仍然通过 build Action content 添加。

但是 uri 方案似乎不再起作用了。

我也试过了:

var file = await StorageFile.GetFileFromPathAsync("/DataModel/Accounts.csv");
var read = await FileIO.ReadTextAsync(file);

如何访问 WinRT 类库中的文件?文件库的行为是否与 Store 应用项目不同?

【问题讨论】:

    标签: windows-runtime winrt-async


    【解决方案1】:

    您可以像这样访问 Windows Store 类库中的文件。

    var _Assembly = Assembly.Load(new AssemblyName("ASSEMBLY_NAME"));
    var _Stream = _Assembly.GetManifestResourceStream("YOUR_FILE_NAME_WITH_PATH.xml");
    

    请注意,类库中的路径成员由. 分隔,而不是由\ 分隔

    获取所有资源名称

    var names = _Assembly.GetManifestResourceNames();
    

    如果资源built action 属性未设置为embedded resource,则GetManifestResourceStream 方法将始终返回NULL

    【讨论】:

    • 如您所说,您的解决方案在构建操作设置为embedded resource 的情况下有效。但我已将构建操作设置为content
    • 但是content 构建动作不起作用,如果是类库,你必须使用embedded resource
    • 这是 WindowsRT 的新限制吗?在.Net 中,可以使用content build actioncopy if newer 将文件添加到类库中。在程序集中,您只需编写一个简单的var text = File.ReadAllText("TextFile1.txt") 即可访问该文件。
    • +1 好答案!路径类似于:MyClassLib.DataModel.Accounts.csv。我使用 GetType().GetTypeInfo().Assembly 来获取正在执行的程序集。
    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多