【发布时间】:2012-08-07 05:43:59
【问题描述】:
我有一个方法,它接受一个字符串参数,它是一个文本文件的文件路径。我希望能够传入我作为资源嵌入到程序集中的文本文件。
有没有办法获得对嵌入文本文件的字符串引用,以便它可以用作打开 StreamReader 的文件路径?
谢谢。
【问题讨论】:
我有一个方法,它接受一个字符串参数,它是一个文本文件的文件路径。我希望能够传入我作为资源嵌入到程序集中的文本文件。
有没有办法获得对嵌入文本文件的字符串引用,以便它可以用作打开 StreamReader 的文件路径?
谢谢。
【问题讨论】:
有没有办法获得对嵌入文本文件的字符串引用,以便它可以用作打开 StreamReader 的文件路径?
不,嵌入的资源不是单独的文件,而是嵌入到可执行文件中。但是,您可以使用StreamReader 获取可以读取的流。
var name = "...";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
using (var streamReader = new StreamReader(stream)) {
// Read the embedded file ...
}
【讨论】:
您可以使用Assembly.GetManifestResourceStream(resource_name_of_the_file) 访问文件的流,将其写入TEMP 目录并使用此路径。
例如,如果您的项目中有一个位于路径“Resources\Files\File.txt”的文件,并且项目的程序集默认命名空间是“RootNamespace” ,您可以从该程序集的代码中访问文件的流
Assembly.GetExecutingAssembly().GetManifestResourceStream("RootNamespace.Resources.Files.File.txt")
【讨论】:
适用于我的用例的一种方法来自以下答案: https://stackoverflow.com/a/34664553/11860907
对于二进制文件:File.WriteAllBytes(outputpath, Properties.Resources.file);
对于文本文件:File.WriteAllText(outputpath, Properties.Resources.file);
当我的程序第一次打开时,我只是为我需要的每个嵌入式资源文件运行了这行代码,并将资源文件放在我可以作为字符串路径引用的某个位置。
【讨论】: