как записать путь к внешнему файлу во включенном источнике c ++ - PullRequest
0 голосов
/ 23 февраля 2011

Предположим, я пишу библиотеку или набор инструментов mytool, где определен класс MyTool, который могут использовать другие люди.Предположим, у меня есть дерево каталогов, подобное этому:

project
| - program1
    | - main1.cpp
...
| - mytool
    | - mytool.h
    | - mytool.cpp
    | - data.txt

в tool1.cpp Я использую внешний двоичный огромный файл data.dat:

ifsteam f("data.txt");

main1.cpp использует mytool, ноесли mytool.(s)o связан с main1.o, программа не может найти data.dat, для этого случая мне нужно изменить предыдущую строку на:

ifstream f("../mytool/data.txt");

, но я не могу знать, где другие людинапример, mytool они могут иметь другое дерево каталогов:

project
| - program1
    | - main1.cpp
    | - mytool
        | - tool1.h
        | - tool2.cpp
        | - data.dat

Кроме того (я прав?) путь зависит от того, где программа выполняется.

Единственное решениеЯ могу себе представить, это передать классу-конструктору MyTool путь data.dat, но я хочу скрыть этот файл для пользователя.

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

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

Иногда это не вариант, поскольку вы не хотите распространять исходный код илипотому что вы хотите разрешить изменение пути во время выполнения.Затем вы можете прочитать файл конфигурации во время выполнения, в котором указано, где находится файл.Но это всего лишь уровень абстракции: вам все еще нужно знать, где находится этот файл конфигурации.Вы можете, например, спросить систему, где находится личный каталог пользователя, а затем найти файл в этом каталоге.Это своего рода смесь между компиляцией и вычислением пути во время выполнения.

1 голос
/ 23 февраля 2011

Одним из вариантов будет использование переменной окружения для расположения ваших инструментов.Например, назовите его MYTOOLDIR.Вы можете установить путь при установке MyTool.Вызов getenv("MYTOOLDIR"); может разрешить путь.

В Windows, в каталоге mytool, запустите SETX PATH=%PATH%;./ или в Linux, просто PATH=$PATH:./.(Укажите set_env.bat или еще что-нибудь для этого.)

0 голосов
/ 23 февраля 2011

Вам нужно будет сделать местоположение бинарного файла значением конфигурации, которое пользователь определяет при конкретной установке программы. Или, проще, просто всегда помещайте двоичный файл в то же место, что и конечный исполняемый файл, и используйте «data.dat» в качестве пути.

...