2009-12-04 9 views
5

私は、Windowsパスを調べて操作する必要のあるクロスプラットフォームアプリケーションを作成しています。Windowsパスを操作するためのクロスプラットフォームライブラリですか?

具体的には、私が今いる特定の問題については、パスが絶対的であるか相対的であるかを知る必要があります。

現在のコードはもちろん、Windows上で魔法のように動作boost::filesystem::pathを使用しています:ネイティブや携帯:このアプローチの

boost::filesystem::path the_path(the_path_as_a_string); 
if (!the_path.has_root_path()) { /* do stuff */ } 

問題はboost::filesystem::pathは2つのモードのみを有することです。これは、LinuxでコンパイルするとWindowsのパス文法が利用できないことを意味します(ソースでは#ifdefが編集されています)。したがって、パス "C:\ path"はWindowsでは絶対パスとみなされますが、Linuxでは相対パスとみなされます。


Windowsパスを検査して操作できるクロスプラットフォームのC++ライブラリをお勧めしますか?


今のところWindowsパス操作は、パスが絶対パスかどうかを確認することです。

私が絶対パスに使用する基準は、両方ともドライブレターを含み、パスは\で始まるということです。この基準の下の絶対パスの例はC:\pathです。これらは両方とも、この基準の下での相対パスの例です:C:path\path

+0

この区別は白黒ではないことにご注意ください。有効なパス 'C:foo.txt'を考えてみましょう。 C:ドライブ_の現在の作業ディレクトリ_を使用します。 – MSalters

+1

MSalters:私は質問した時点でそれについて考えなかった。また、私が維持しようとしているコードの元の作家はそれを考えていなかったようです。今私は実際にどのような振る舞いが望まれているのかを見つけなければなりません。 –

答えて

0

これについてライブラリを見つけることは難しいようです。 1つの可能性はWinelibのPathIsRelativeですが、私はWinelibを使いたくありません。

私は、この小さなものを決めるために非常に特殊な解決策をとった。パスが正しいと仮定すると(私の場合は正当な仮定)、絶対パスには:\が含まれ、相対パスには含まれません。

悪いですが、実際の解決策は次のとおりです。適切なライブラリがありません。 :\の存在を確認します。

1

QFileInfoのQTはどうですか?

+0

これは同じ基本的な仮定を持っているようです。 Windows文法は、Windowsでコンパイルするときにのみ利用できます。( –

+0

次に、クロスコンパイル!:) – alexkr

0

Linux上のWindowsパスでプログラムが意図していることを詳しく説明できますか?

Windowsのパス文字列に単純な変換を適用し、Unixパスに構文的に変換し、boost :: filesystemを使って操作するだけで十分でしょう。

関連する問題