C#中的目录路径

时间:2011-08-24 10:42:28

标签: c# .net winforms

在我的winform应用程序中,我需要一个像

这样的路径
"D:\NEWD\WIN_NEW\Sales\Report\Report2.rdlc"

但我只有"Sales\Report\Report2.rdlc"这个东西是我无法预测这条路径D:\NEWD\WIN_NEW但是在使用时

Directory.GetCurrentDirectory() + "\\Sales\\Report\\Report2.rdlc";

路径包含我的bin\debug目录。我怎样才能获得理想的路径?

3 个答案:

答案 0 :(得分:8)

在调试时,当前目录的路径(执行程序的路径)将位于。\ bin \ debug \ dir中。

部署该工具时,您将不再遇到此问题。

看来,您希望使用您的工具部署“Sales”目录:所以也许您应该在解决方案中包含它并选择将其复制到带有可执行文件的输出目录(。\ bin \ debug)。

答案 1 :(得分:4)

如果你知道你总是会在bin \ debug中你可以做到

 var path=System.IO.Path.GetFullPath(@"..\..\Sales\Report\Report2.rdlc");

或者你可以做一些检测

var path=@"Sales\Report\Report2.rdlc";
var currentDir=System.IO.Directory.GetCurrentDirectory();
if (currentDir.ToLower().EndsWith(@"\bin\debug") ||
    currentDir.ToLower().EndsWith(@"\bin\release")) {

  path=System.IO.Path.GetFullPath(@"..\..\" + path);
} else {
  path=System.IO.Path.GetFullPath(path);
}

另一种形式的检测是只在你调试时才进行路径条,在这种情况下应该设置DEBUG以便你可以...

var path=@"Sales\Report\Report2.rdlc";
#if DEBUG

path=@"..\..\"+path;

# end if
path=System.IO.Path.GetFullPath(path);

最后一个版本的优点是所有额外检测都不会编译到您的发布代码中。

答案 2 :(得分:2)

嗯,我认为这似乎是一个更为小问题: 考虑到现在你有bin\Debug,在部署时该路径消失,所以说GetCurrentDirectory(),我会说最好使用Path.GetDirectoryName(Application.ExecutablePath),你将获得你的部署路径。而且有一天您可能需要更改部署的文件结构,所以......

就在您的bin \ Debug或bin \ Release中复制您未来的部署文件/文件夹布局,这样您的应用程序将以相同的方式在DEBUG和DEPLOY中工作。总是在可能的情况下。

希望这有帮助。