web-dev-qa-db-ja.com

C ++で相対パスでファイルを開く方法は?

私は今テストケースを書いています、そして私は私が読もうとするいくつかのテストファイルを作成しました。絶対パスは次のとおりです。

_/home/user/code/Project/source/Project/components/Project/test/file.dat
_

しかし、絶対パスでのテストは明らかな理由で悪いです。だから私は絶対パスを相対パスに変換しようとしましたが、なぜそれが機能しないのかわかりません。相対パスでファイルを作成しました

_findme.dat
_

そして私はそれを見つけました

_/home/user/code/Project/build/source/Project/components/Project/test/findme.dat
_

相対パスを作成しました

_/../../../../../../source/Project/components/Project/test/file.dat
_

ただし、ファイルは開かれておらず、isオブジェクト、std::ifstream is (path);に関連付けられておらず、is.is_open()関数はfulseを返します。

手伝って頂けますか?

8
Peter111

使用しているのは、相対パスではありません。相対パス構文を使用していることは確かですが、実際の意味は使用していません。

/../../../../../../source/Project/components/Project/test/file.dat

このパスは/で始まります。これは、ルートが親を見つけ、ルートに親がないためにルートを再び返すことを意味します...これの簡略化されたバージョンは次のとおりです。

/source/Project/components/Project/test/file.dat

したがって、もちろん存在しないルート内のフォルダソースを検索します。

あなたがすべきことは次のようなものです(あなたのコードがプロジェクトフォルダにあると仮定して):

./test/file.dat

または、Projectフォルダー内の他のフォルダーにある場合は、次のようにすることができます。

../test/file.dat

../現在のコードディレクトリの親に移動します。この場合、このディレクトリはProjectです。

11
Usama Zafar