我项目中的一些资源很好,使用字符串路径工作正常但是如果我将项目移动到另一个目录或另一台计算机,它将停止工作。
我需要在字符串变量
中获取项目资源文件夹的路径像这样的东西
C:\Users\User1\Documents\<projects folder>\<project name>\Resources\
提前致谢。
答案 0 :(得分:10)
如果您知道相对于应用运行位置的路径,您可以执行以下操作。 首先,获取应用程序的运行路径:
string RunningPath = AppDomain.CurrentDomain.BaseDirectory;
然后,使用以下内容导航到相对路径:
string FileName = string.Format("{0}Resources\\file.txt", Path.GetFullPath(Path.Combine(RunningPath, @"..\..\")));
在这个例子中我是我的&#34;资源&#34;文件夹位于我运行的两个目录中。
我还应该提一下,如果您的资源包含在项目中,您应该能够使用它:
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
这将返回您的资源数组。
答案 1 :(得分:7)
如果文件存储在项目文件夹中,则可以使用检索文件
System.AppDomain.CurrentDomain.BaseDirectory
。
此语句检索有关安装应用程序的位置的路径。
点击Here以获取详细说明。
答案 2 :(得分:2)
这可能不是最干净的方式,但它对我有用。
如果您的结构如下:
C:\...\MyApp\app.exe
C:\...\MyApp\ConfigFiles\MyConfig.xml
代码将返回相对于正在运行的程序集的路径。
GetPath("ConfigFiles/MyConfig.xml") // returns the full path to MyConfig.xml
private string GetPath(string relativePath)
{
var appPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
string pattern = @"^(.+\\)(.+exe)$";
Regex regex = new Regex(pattern, RegexOptions.None);
var match = regex.Match(appPath);
return System.IO.Path.GetFullPath(match.Groups[1].Value + relativePath);
}
答案 3 :(得分:0)
您可以尝试使用| DataDirectory |记录here.
对其工作原理的说明以前难以使用数据库文件的原因之一 是不同的序列化数据库的完整路径 地方。这使得共享项目和部署项目变得更加困难 应用。在此版本中,.NET运行时添加了对内容的支持 我们称之为DataDirectory宏。这允许Visual Studio放置一个 要扩展的连接字符串中的特殊变量 运行。所以没有像这样的连接字符串:
"Data Source=.\SQLExpress;AttachDbFileName=c:\program files\app\data.mdf"
您可以拥有如下连接字符串:
"Data Source=.\SQLExpress;AttachDbFileName=|DataDirectory|\data.mdf"
SqlClient和OleDb支持此连接字符串语法 托管提供商。
默认情况下,| DataDirectory |变量将扩展如下:
- For applications placed in a directory on the user machine, this will be the app's (.exe) folder. - For apps running under ClickOnce, this will be a special data folder created by ClickOnce - For Web apps, this will be the App_Data folder