我发现自己不得不依赖必须使用一些本地文件夹。通常没问题,但主要问题是如果将项目转移到另一台机器,即使在开发期间,结构也会报告错误。
错误是当我从文件中读取时,页面无法在本地网站上显示,并且出现IO错误。
目录如下
C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset
有问题的文件夹是
他们使用的实际文件夹
private String folderPlay = @"C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset\Master Audio\";
private String folderRecord = @"C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset\User Audio\";
private String folderImages = @"C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset\Images\";
我想做的是能够相对于代码调用这些文件吗?如果不是太麻烦,可以附上一个小纸条,这样我就能理解/
答案 0 :(得分:1)
仅使用项目中的路径而不是整个物理路径
private String folderPlay = @"~/Master Audio";
private String folderRecord = @"~/User Audio";
private String folderImages = @"~/Images";
我的建议是使用Master_Audio
,User_Audio
之类的路径。不要在单词之间留出空格
答案 1 :(得分:0)
我发现在类似情况下有用的是实际将内容根目录注入需要知道特定资源位置的类:
E.g。
class Foo{
private string readonly _contentRoot;
public Foo (string contentRoot)
{
_contentRoot = contentRoot
}
public void DoSomethingWithImage()
{
string imgRelativePath = "/img/img1.png";
string imgPath = Path.Combine(_contentRoot, imgRelativePath);
// do something with imgPath
}
}
这样做的好处是您现在可以为您的方法编写测试(否则可能很难)。有时,单元测试框架会将库复制到临时位置,但您仍然希望运行测试。
您可以从多个位置解析根目录,具体取决于您运行代码的方式:
Assembly.GetExecutingAssembly().GetName().CodeBase
HttpRuntime
或HttpContext
AppDomain.BaseDirectory
或类似的经验法则: