0

実行時に (ifstream を使用して) テキスト データ ファイルにアクセスする必要があるクラス メソッド (UNIX 環境の共有オブジェクトに実装) があります。現在、メソッドは、相対パスなしでデータファイルを開くことができると想定しています。つまり、次のようなものです。

ifstream dataFile("data.txt");

共有オブジェクトは Python コードから読み込まれ、読み込みに使用できるようにするために\usr\lib\、makefile のビルド後の手順としてフォルダーにコピーされます。私の質問は、テキスト データ ファイルを共有オブジェクトで使用できるようにする方法です。以下の可能性を検討しました。

  • 相対パスを使用しますが、その方法は完全に確実というわけではありません (プロジェクトはさまざまなインスタンスでホストされており、ディレクトリ ツリーが同じままであるとは確信できません (たとえば、1 か月後))。
  • データファイルも にコピーします\usr\libが、これは間違った態度だと思います。

どんな提案も歓迎します。

4

2 に答える 2

2

これを行う適切な方法は、テキスト ファイルの場所を、プロジェクトのインストール時に設定される構成可能な値にすることです。/etc/ に構成ファイルを使用することは、その値を保存する一般的な方法です。

そうすれば、マシンに依存しないすべてのファイル (そのデータ ファイルマシンに依存しませんよね?) を含むテキスト ファイルを、たとえば /usr/share/ に置くことができ、コードはその場所を「認識」します。

コードの操作の一部としてデータ ファイルを変更する場合は、Filesystem Hierarchy Standard (FHS) に従って /var (/var/lib または /var/cache) のどこかに配置する必要があります他のほとんどの Unix ファイルシステム標準。

コメントの1つで述べたように、データファイルを構成ファイルと見なすことができる場合は、そのパスを /etc/ の下のどこかにハードコーディングするだけで済みます (例: /etc/MyProject/data.cfg)。

于 2010-12-05T11:01:49.150 に答える
0

私は2つの解決策を考えることができます:

  • 共有オブジェクトをロードするとき、何らかの方法でファイルへのパスを指定します。
  • ファイルを /usr/lib にコピーする代わりに、/usr/lib でシンボリック リンクを作成することもできますが、それは私見では最善の方法ではありません。

最初の解決策は私にとって最良の解決策です。

于 2010-12-05T10:56:24.470 に答える