我在WCF设置项目中包含了一个文本文件作为输出。 安装项目后,文本文件与dll,exe和config文件正确位于同一文件夹中(C:\ Program Files \ KLTesting \ KLTestApp)。 但是当程序试图读取它时,它看起来在“C:\ Windows \ system32”下,找到&的正确方法是什么。看了吗?
我有
string a = Directory.GetCurrentDirectory();
a += "/R0303.txt";
string content = File.ReadAllText(a);
感谢。
答案 0 :(得分:1)
您应该使用AppDomain.CurrentDomain.BaseDirectory
或AppDomain.CurrentDomain.SetupInformation.ApplicationBase
来获取.exe文件的目录。
答案 1 :(得分:0)
首先,您不应该调用Directory.GetCurrentDirectory()并使用文件名连接。该服务在IIS或其他类型的容器之类的Web服务器中运行,因此GetCurrentDirectory不会在您发现时提供您的想法。 (在快速切线上,作为未来的建议,如果你想要进行路径组合,你应该使用Path.Combine方法,因为它将处理所有角落情况并且是跨平台的。)
有几种方法可以做到这一点:
Assembly myAssembly = Assembly.GetAssembly(SomeTypeInAssm.GetType());
string fullFileName = Path.Combine(myAssembly.Location, "MyFile.txt");
fullFileName应该是你要找的。确保使用实际位于程序集中的类型,该类型位于相关目录中并从中引用。但请注意,因为您在Program Files区域中的问题中的这个文件是Vista和更高操作系统上的安全区域,除了读取文件之外,您可能无权执行任何操作。
此外,您可以让应用程序的安装程序在注册表中安装路径。然后你的服务如果在同一个盒子上可以提取这些信息。
此外,您可以确保要加载的文件位于可访问相关WCF服务的Web服务器环境中。