15

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

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

4

4 に答える 4

20

絶対パスを使用していない限り、変換する必要はまったくありません。Windows は自動的にスラッシュをバックスラッシュに変換します。そのため、スラッシュ パス区切り記号を含む相対パスを使用すると、うまくいくでしょう。絶対パスはできるだけ避けるべきです。

于 2008-09-23T17:33:13.213 に答える
13

boost::filesystem を試す

于 2008-09-23T17:33:24.337 に答える
5

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

于 2008-09-23T17:33:37.237 に答える
0

多くの方法がありますが、IMHO の正しい答えは、パスの操作を避けるためにプログラムを再設計することです。ここに回答を投稿しました:関連する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 のような相対パス。これらのパスでのみ動作するようにアプリケーションを制限します。この制限と、アプリケーションがユーザーへのパスを処理する方法を文書化してください。
于 2016-12-06T09:13:48.900 に答える