2010-12-05 10 views
0

実行時に(ifstreamを使用して)テキストデータファイルにアクセスする必要があるクラスメソッド(UNIX環境では共有オブジェクトで実装されています)があります。現在の方法は、すなわち実行時にデータファイルにアクセスする共有オブジェクトを有効にする方法(UNIX)

ifstream dataFile("data.txt"); 

ような共有オブジェクトがPythonコードからロードされ、それがローディングのために利用可能にするために、それがされている、データファイルは、任意の相対パスせずに開口可能であることを前提としていmakefileのビルド後のステップとして\usr\lib\フォルダーにコピーされます。私の質問は、テキストデータファイルを共有オブジェクトで使用できるようにする方法です。 (プロジェクトが様々なインスタンス上でホストされていると私はディレクトリツリーは、例えば(同じ滞在することを確認することはできません)

  • は、いくつかの相対パスを使用しますが、その方法は完全にばかプルーフではありません:私は、次の可能性を検討してきました今から1ヶ月)。
  • データファイルも\usr\libにコピーしますが、これは間違った姿勢です。

いずれかの提案が歓迎されます。

+0

データファイルは変更される予定ですか? –

+0

@Ignacio Vazquez-Abrams:はい、それを再コンパイルする必要なしに設定を変更できるコンテンツファイルと考えてください。 –

答えて

2

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

このようにして、テキストファイルを次のように入力することができます。/usr/share /にマシンに依存しないすべてのファイル(そのデータファイルはマシンに依存しないです)とあなたのコードはそれを見つける場所を "知る"でしょう。

データファイルがコードの操作の一部として変更される場合は、ファイルシステム階層標準に従って/ var(/ var/libまたはおそらく/ var/cache)の下に置きます(FHS)および他のほとんどのUnixファイルシステム標準です。

データファイルが設定ファイルと考えられる場合は、あなたのコメントの1つで述べたように、/ etc /(例:/etc/MyProject/data.cfg)のどこかにそのパスをハードコードすることができます。続ける。

+0

はい、マシンに依存しません。ありがとう! –

0

私は2つの解決策を考えることができます:あなたが共有オブジェクトをロードすると

  • は、あなたが何らかの形でそれをあなたのファイルへのパスを与えます。
  • ファイルを/ usr/libにコピーするのではなく、シンボリックリンクを作成して/ usr/libに作成することができますが、これはimhoを実行するための最良の方法ではありません。

第1の解決策は私にとって最高のものです。

関連する問題