Относительный путь к файлу с использованием C # - PullRequest
8 голосов
/ 19 января 2011

У меня есть программа командной строки, которая принимает файл конфигурации в качестве параметра, то есть C: \ myprogram.exe -c C: \ configFiles \ MyConfigFile.txt .Я хочу сделать так, чтобы мне не приходилось вводить абсолютный путь к файлу конфигурации, поэтому вместо вышеупомянутого я могу просто ввести C: \ myprogram.exe -c MyConfigFile.txt

Я недостаточно знаком с тем, как C # работает с путями, чтобы понять, можно ли это сделать или как это сделать.Любое понимание приветствуется.

Ответы [ 5 ]

12 голосов
/ 19 января 2011

Использование Path.GetFullPath ()

Что-то вроде:

string path = "MyConfigFile.txt";
string fullPath = System.IO.Path.GetFullPath(path);

Это если файл конфигурации находится в текущем каталоге.Если они хранятся в стандартной папке, вы можете использовать Path.Combine ()

string basePath = "C:\Configs";
string file = "MyConfigFile.txt";
string fullPath = System.IO.Path.Combine(basePath, file);
4 голосов
/ 19 января 2011

Вы передаете только строку.Вы можете обрабатывать его относительным путем.

Если вы использовали этот код, он по умолчанию будет поддерживать относительные пути.

FileInfo попытается использовать путь вEnvironment.CurrentDirectory сначала, если указанный путь не является явным.

var file = new FileInfo(args[1]); // args[1] can be a filename of a local file
Console.WriteLine(file.FullName); // Would show the full path to the file
2 голосов
/ 20 января 2011

У вас есть несколько общих опций:

  • Сохранить путь к каталогу в файле конфигурации (вы сказали, что не хотите этого делать)
  • Пусть пользователь введет относительныйпуть (.... \ MyFile.txt)
  • Программный поиск файлов, соответствующих имени (очень медленный и склонный к поиску нескольких файлов с одинаковым именем)
  • Предположим, файл данных находится вкаталог-исполнитель

В любом случае, когда вы его нарезаете, пользователь должен указать путь к каталогу, будь то файл конфигурации, ввести относительный путь или выбрать из списка файлов с одинаковыми именами.в разных каталогах.

АНАЛОГИЯ: Вы кладете учебник в шкаф, где-то в школе.Вы просите своего друга достать книгу из «шкафчика», не намекая, какой именно шкафчик может быть.Вы должны ждать очень долго и в итоге получить 50 похожих книг.Или предоставьте подсказку относительно прихожей, банка шкафчиков и / или номера шкафчика, в котором может храниться книга.Неопределенность вашей подсказки напрямую связана с временем отклика и потенциалом для возвращения множества возможностей.

0 голосов
/ 19 января 2011

Без относительного пути в качестве части входного аргумента вашему приложению потребуется:

  • либо выполнить поиск файла, переданного в
  • , добавить путь к имениConfig каталог с именем файла
0 голосов
/ 19 января 2011

Ну, стандартные классы .NET работают с относительными путями так же, как и с абсолютными, так что вы можете использовать их без проблем.Если C: root является рабочим каталогом вашей программы, вы можете использовать c:\myprogram.exe -c configFiles\MyConfigFile.txt, и он будет указывать на c:\configFiles\MyConfigFile.txt.

...