質問

クロスプラットフォームのパスを処理する C++ GNU スタンドアロン クラスは存在しますか?私のアプリケーションは Windows と LINux 上で構築されています。構成ファイルは、別のディレクトリ内の別のファイルを参照します。Linux または Windows の両方で動作するクラスに、他の構成ファイルのパスを読み込めるようにしたいと考えています。

どちらのシステムで使用するパスを変換するためのフットプリントが最も小さいクラスはどれでしょうか?ありがとう

役に立ちましたか?

解決

絶対パスを使用しない限り、変換する必要はまったくありません。Windows はスラッシュをバックスラッシュに自動的に変換するため、スラッシュ パス区切り文字を含む相対パスを使用すると、完璧になります。可能な限り絶対パスは避けるべきです。

他のヒント

ファイルシステムライブラリ ブーストがおそらく役に立ちます。

方法はたくさんありますが、私の個人的な正しい答えは、パスの操作を避けるためにプログラムを再設計することです。ここに回答を投稿しました: https://stackoverflow.com/a/40980510/2345997 それは関連しています。

方法:

  1. コマンド ライン オプションを追加すると、ユーザーは構成ファイルからパスを読み取るのではなく、問題のパスを指定できるようになります。
  2. ユーザーがベース パスを指定できるように、コマンド ライン オプションを追加します。構成ファイル内のパスは、このベース パスの下にあるものとして解釈されます。
  3. 設定ファイルを 3 つに分割します。1 つのファイルはクロスプラットフォーム構成を持ち、別のファイルは Windows のみの構成を持ち、最後のファイルは Linux のみの構成を持ちます。これにより、ユーザーは Windows と Linux の両方に正しいパスを指定できるようになります。Windows では、プログラムはクロスプラットフォーム構成ファイルと Windows のみの構成ファイルを読み取ります。Linux では、クロスプラットフォーム ファイルと Linux 専用の構成ファイルが読み取られます。
  4. 構成ファイルの解析に前処理を追加します。これにより、プログラムが実行されている OS に応じて、ユーザーがファイル内の一部の行をプログラムに無視させることができる 1 つの構成ファイルを作成できるようになります。したがって、ユーザーはファイルへのパスを 2 回指定できます。Linux 用に 1 回、Windows 用に 1 回。
  5. ファイルが常に実行可能ファイルと同じディレクトリに配置されるように設計を変更します。その場合、ユーザーはファイルへのパスではなく、構成ファイル内でファイル名のみを指定します。
  6. 「/」を「\」に切り替える簡単な関数を使用します。次に、パスを Linux パスとして指定する必要があり、この変換が Windows に適用されることをユーザーに文書化します。
  7. このための独自のパス ミニ言語を作成し、ユーザーに文書化します。例えば:「/」 - ディレクトリ区切り文字を指定します。 {root} - ファイルシステムのルートに展開します。 {cwd} - 現在のディレクトリに展開します。 {app} - アプリケーションへのパスに展開します。その後、ユーザーは次のようにファイル パスを指定できます。両方のプラットフォームの {root}/myfiles/bob.txt。
  8. 一部のパスは両方のプラットフォームで動作します。例えば:../my files/bill.txt のような相対パス。アプリケーションがこれらのパスでのみ動作するように制限します。この制限と、アプリケーションがユーザーへのパスを処理する方法を文書化します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top