Путь к каталогу в C # - PullRequest
       1

Путь к каталогу в C #

1 голос
/ 24 августа 2011

В моем приложении 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 ]

8 голосов
/ 24 августа 2011

Во время отладки путь к текущему каталогу (путь, в котором выполняется программа) будет находиться в. \ Bin \ debug \ dir.

При развертывании инструмента эта проблема больше не возникает.

Кажется, вы хотите развернуть каталог "Sales" с помощью своего инструмента: так что, возможно, вам следует включить его в ваше решение и выбрать его для копирования в выходной каталог (. \ Bin \ debug) с вашим исполняемым файлом.

4 голосов
/ 24 августа 2011

Если вы знаете, что вы всегда будете в 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 голосов
/ 24 августа 2011

Хм, я думаю, что это более сложный вопрос, как кажется: учитывая, что теперь у вас есть bin\Debug, при развертывании этот путь исчезает, поэтому, говоря GetCurrentDirectory (), я бы сказал, что лучше использовать Path.GetDirectoryName(Application.ExecutablePath), вы будетеполучить ваш путь развертывания.А также однажды вам может понадобиться изменить файловую структуру вашего развертывания, так что ...

Просто в вашем bin \ Debug или bin \ Release скопируйте ваше будущее расположение файлов / папок для развертывания, чтобы ваше приложениебудет работать в DEBUG и в DEPLOY таким же образом.Всегда, если это возможно.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...