2016-05-15 81 views
0

我发现自己不得不依赖于必须使用一些本地文件夹。通常没有问题,但主要问题是如果将项目转移到另一台机器,即使在开发过程中结构也会报告错误。C#如何调用文件的相对地址而不是绝对地址

错误是,当我从文件读取时,页面无法显示在本地网站上,IO错误。

的目录如下

C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset 

有问题的文件夹

  • Master音频
  • 图片
  • 用户音频

File Location

,因为他们已经习惯

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\"; 

我希望做的是能够相对于这些代码文件调用实际的文件夹?此外,如果它没有太多的麻烦可能会小记被如此重视我能理解/

回答

1

仅使用路径在您的项目,而不是整个物理路径

private String folderPlay = @"~/Master Audio"; 
private String folderRecord = @"~/User Audio"; 
private String folderImages = @"~/Images"; 

,我的建议是像Master_Audio使用路径, User_Audio。不要把字

0

我发现在类似的情况是有用的实际注入内容的根目录到需要知道具体的资源位置的类之间空间:

例如

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
  • 对于Web应用程序HttpRuntimeHttpContext
  • 对于Windows应用AppDomain.BaseDirectory或类似

凭经验:

  • 你不应该有任何硬编码的绝对路径(疼痛测试,另一台机器上运行,部署)
  • 相反,使用相对路径(通常是相对于项目的根或根/内容)
相关问题