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