Как включить общий объект для доступа к файлу данных во время выполнения (UNIX) - PullRequest
0 голосов
/ 05 декабря 2010

У меня есть метод класса (реализованный в общем объекте в среде UNIX), который должен обращаться к текстовому файлу данных во время выполнения (используя ifstream).В настоящее время метод предполагает, что файл данных доступен для открытия без какого-либо относительного пути, т.е. что-то вроде

ifstream dataFile("data.txt");

Общий объект загружается из кода Python, и для того, чтобы он был доступен для загрузки, онкопируется в папку \usr\lib\ в качестве шага после сборки файла сборки.У меня вопрос, как сделать файл текстовых данных доступным для общего объекта.Я рассмотрел следующие возможности:

  • Использовать некоторый относительный путь, но этот метод не является полностью надежным (проект размещается в разных экземплярах, и я не могу быть уверен, что дерево каталогов останется прежним(например, через месяц).
  • скопируйте файл данных также в \usr\lib, но я чувствую, что это неправильное отношение.

Любые предложения приветствуются.

Ответы [ 2 ]

2 голосов
/ 05 декабря 2010

Правильный способ сделать это - сделать расположение текстового файла настраиваемым значением, которое будет установлено при установке вашего проекта. Использование файла конфигурации в / etc / является распространенным способом хранения этого значения.

Таким образом, вы можете поместить текстовый файл, например, в. / usr / share / со всеми машинно-независимыми файлами (этот файл данных является машинно-независимым, верно?), и ваш код будет "знать", где его найти.

Обратите внимание, что если файл данных будет изменен как часть операции вашего кода, то его, вероятно, следует поместить где-нибудь в / var (/ var / lib или, возможно, / var / cache) в соответствии со стандартом иерархии файловой системы ( FHS) и большинство других стандартов файловой системы Unix.

Если файл данных можно считать файлом конфигурации, как вы упомянули в одном из ваших комментариев, вы можете просто жестко закодировать его путь где-нибудь в / etc / (например, /etc/MyProject/data.cfg) и перейти на.

0 голосов
/ 05 декабря 2010

Я могу придумать два решения:

  • Когда вы загружаете ваш общий объект, вы как-то указываете ему путь к вашему файлу.
  • Вместо копирования файла в / usr/ lib вы можете создать символическую ссылку, сделайте это в / usr / lib, но это не лучший способ сделать imho.

Первое решение - лучшее для меня.

...