如何在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