26

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

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

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

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

例えば:

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

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

ありがとう、

4

3 に答える 3

22

std::ifstreamこの情報を保存することはできません。

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

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

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path");
    std::string abs_path_str = abs_path.string();
    
于 2010-06-11T12:33:46.873 に答える
4

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

于 2010-06-11T12:32:55.797 に答える
2

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

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

于 2010-06-11T16:32:44.267 に答える