如何在c#服务项目中获取文件相对路径?

如何在c#服务项目中获取文件相对路径?,c#,C#,我有以下代码: Stream stream = new StreamReader("~/quartz.xml").BaseStream; Q1:C#中指定路径的“~”符号是什么 问题2:如何在C#服务项目中获取“~”目录 问题3:它是指bin exe目录还是项目名称目录 我的Windows服务项目中的quartz.xml文件位于两个位置: D:\jsptpd\Code\jsptpdJobScheduler\jsptpdJobScheduler\bin\Debug D:\jsptpd\Code

我有以下代码:

Stream stream = new StreamReader("~/quartz.xml").BaseStream;
Q1:C#中指定路径的“~”符号是什么

问题2:如何在C#服务项目中获取“~”目录

问题3:它是指bin exe目录还是项目名称目录

我的Windows服务项目中的
quartz.xml
文件位于两个位置:

D:\jsptpd\Code\jsptpdJobScheduler\jsptpdJobScheduler\bin\Debug

D:\jsptpd\Code\jsptpdJobScheduler\jsptpdJobScheduler
当然这条路每次都会改变!所以得到相对路径比较好

完全忽略它:

Stream stream = new StreamReader("quartz.xml").BaseStream;
默认目录是
.exe
的目录


根据OP对问题的编辑:

转到查看>解决方案资源管理器。右键单击有问题的文件,然后选择“属性”。将“复制到输出目录”选项更改为“始终复制”。然后使用上面的代码。

完全忽略它:

Stream stream = new StreamReader("quartz.xml").BaseStream;
默认目录是
.exe
的目录


根据OP对问题的编辑:

转到查看>解决方案资源管理器。右键单击有问题的文件,然后选择“属性”。将“复制到输出目录”选项更改为“始终复制”。然后使用上面的代码。

如果我们使用(../quartz.xml):

StreamReader读取路径为(不是文件实际路径):

如果我们使用(quartz.xml):

StreamReader读取路径为(不是文件实际路径):

这是查找文件相对路径的方法:

                string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
                string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
                string configFilePath = assemblyDirPath + "\\quartz.xml";
                Stream stream = new StreamReader(configFilePath).BaseStream;
因此路径是(您可以指定两个路径中的任意一个):

如果我们使用(../quartz.xml):

StreamReader读取路径为(不是文件实际路径):

如果我们使用(quartz.xml):

StreamReader读取路径为(不是文件实际路径):

这是查找文件相对路径的方法:

                string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
                string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
                string configFilePath = assemblyDirPath + "\\quartz.xml";
                Stream stream = new StreamReader(configFilePath).BaseStream;
因此路径是(您可以指定两个路径中的任意一个):


~
仅在ASP.NET上下文中定义-它不是一般的C#概念,因此在.NET服务中不可用。
~
仅在ASP.NET上下文中定义-它不是一般的C#概念,因此在.NET服务中不可用。@Dolphin:如果
quartz.xml
不在
.exe
目录,则必须以某种方式指定目录-在配置文件中显式指定,绝对或相对于
.exe
目录-但必须定义查找该文件的位置!如果不指定路径,它将转到
.exe
的目录,如我所说。编辑:马克的评论一针见血。@Dolphin这有多难?我不明白你错在哪里。。。您可以使用,例如
@./quartz.xml“
@”C:/quartz.xml“
@Dolphin:那么请告诉我们该文件在哪里!假设您在
.exe
目录中-文件在哪里?!?!?!?!谢谢你,马克,我想我不会这么客气的:p@Dolphin:如果
quartz.xml
不在
.exe
目录中,则必须以某种方式指定目录-在配置文件中明确指定,绝对或相对于
.exe
目录-但必须定义查找该文件的位置!如果不指定路径,它将转到
.exe
的目录,如我所说。编辑:马克的评论一针见血。@Dolphin这有多难?我不明白你错在哪里。。。您可以使用,例如
@./quartz.xml“
@”C:/quartz.xml“
@Dolphin:那么请告诉我们该文件在哪里!假设您在
.exe
目录中-文件在哪里?!?!?!?!谢谢你,马克,我想我不会这么客气的:p
D:\jsptpd\Code\jsptpdJobScheduler\jsptpdJobScheduler\bin\Debug\quartz.xml