Get File From an Assembly
我想从以下结构读取文件路径
结构就像:AssemblyName-> MyFiles(Folder)-> Text.txt
在这里,我想获取Text.txt的路径。 请帮忙
我认为您正在寻找的是程序集中嵌入的文件。看看这个问题。第一个答案说明了如何设置嵌入式文件,以及如何从代码中获取它。
你可以做
1 2 3 4
| string assemblyPath = Assembly.GetExecutingAssembly().Location;
string assemblyDirectory = Path.GetDirectoryName(assemblyPath);
string textPath = Path.Combine(assemblyDirectory,"MyFiles","Test.txt");
string text = File.ReadAllText(textPath); |
...只是将它分成几部分...但是您可以不用说就可以全部写成一行...
或者,如果您的Environment.CurrentDirectory已经设置为执行程序集位置的目录,则可以执行
1
| File.ReadAllText(Path.Combine("MyFiles","Text.txt")); |
-
我收到异常,"找不到路径c: users taks documents visual studio 2010 Projects Console Applications GetFilesFromAssembly GetFilesFromAssembly bin Debug MyFiles Test.txt的一部分"
-
@ JeffN825我认为他有一个嵌入式文件,而不是与程序集中在同一目录中的文件。
-
如果该文件位于librarys文件夹而不是正在执行的Assemblys文件夹中,则将无法使用。除了嵌入式资源方法外,我还没有找到一种适用于库子文件夹的方法。
Jeff涵盖了您的获取途径,您对他的回答的评论是您要打开的文件实际上包含在项目输出中吗?
在相关文件的属性窗格下,查看Copy to Output Directory选项-通常默认为Do not copy。如果要在编译程序的输出目录中包含文件,则将其设置为Copy Always或Copy if Newer。
作为一般说明,您应始终将任何IO包装在适当的try catch块中,或使用静态File.Exists(path)方法检查文件是否存在
-
问题是我无法将此文件复制到输出目录,我必须从提到的层次结构访问此文件。
-
感谢Eric的建议,它正在工作,我已将资源嵌入
-
@ user1238374,什么是"提到的层次结构"?您的第一个级别是" AssemblyName->",每个人对它的理解都不同(程序集中的嵌入式资源,相对于程序集的路径,甚至甚至是GAC中相对于程序集的路径),请阐明您的意思(以及可能实际想要实现的目标) )。
-
@AlexeiLevenkov:程序集包含一个文件夹名称" MyFiles",而该文件夹名称又包含一个文件名称" Text.txt"。现在,该程序集将由另一个程序集引用,其中我必须阅读" Text.txt"文件的包含。