web-dev-qa-db-ja.com

C ++でstd :: ifstreamからファイルパスを取得する方法

std::ifstreamを使用してファイルを開きます。

相対パス(file.txt)または絶対パス(C:\test\file.txt)を使用してファイルを開くことができます。

ファイル名として文字列を渡しているので、相対パスか絶対パスかわかりません。

std::ifstreamを使用してファイルが正常に開かれた後、絶対パスを取得する方法を教えてもらえますか?

例えば。:

std::ifstream file(strFile); // strFile is "file.txt" or "C:\test\file.txt"

ファイルが正常に開かれた後、絶対パスを取得したいと思います。

ありがとう、

24
Nilesh Shinge

できません、std::ifstreamはこの情報を保存しません。

ただし、できることは次のとおりです。

  1. プロセスの現在の作業ディレクトリを使用して、絶対パスを自分で作成するか、または
  2. Boost.Filesystem ライブラリのようなライブラリを使用して、相対パスと絶対パスの間で変換します。

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path");
    std::string abs_path_str = abs_path.string();
    
19
Alex B

Fstreamクラスには、ファイルを開くために使用される名前にアクセスまたは処理する機能がなく、C++標準ライブラリにはファイル名処理関数がありません。コードを自分で作成するか、サードパーティのライブラリまたはオペレーティングシステムを使用する必要があります。提供される関数。

3
anon

Std :: fstreamでは不可能だと思います。私はWindows上のFILE *に対してそれを行いました(移植性のない方法で)。 ファイルオブジェクトからファイル名まで を参照してください。

ファイル名を記憶する独自のクラスでifstreamを拡張することを検討しましたか?

2
Michael J