2017-01-05 20 views
0

次のように私は、ファイルストリームを作成しています:既存のファイルへのパスを取得する方法は?

ofstream myfile; 
myfile.open(fileName); 

は今どのように私はfileNameという名前のファイルのフルパスを得るのですか? fileNameは絶対パスではなく、相対パスにすることができます。

アイデア?

+0

あなたがC++ 17を使用することはできますか? – Rakete1111

+0

visual studio15がインストールされており、サポートする任意のコードを使用できます –

+0

RTMバージョンのVisual Studio 2017を使用して、/ std:latest(または同様のオプション)をコンパイルして実験的なC++ 17サポートを取得する必要があります。 – Rakete1111

答えて

2

参照:std::basic_ofstream

ストリームを開くために使用されるパスを取得する方法はありません。 fileNameを自分で追跡する必要があります。

編集:質問は私がそれに答えてから編集されています。絶対パスを相対パスから取得することは、C++で可能です。 std::filesystem::absoluteを参照してください。

+0

私は家庭でこれをやっていますが、大学で... Profesorは保存されたファイルへのパスを生成することを私たちに求めています。他の方法はないと確信していますか? –

+0

@IgorBeracka [std :: filesystem](http://en.cppreference.com/w/cpp/experimental/fs)は、ファイルシステムに関する新しい機能を提供します。私は100%まだそれに精通していないが、私は今あなたがstd :: ofstreamからパスを回復させるような機能はありません。 –

+0

@IgorBeracka編集した質問に対する回答を更新しました。 –

2

C++ 17にアクセスできる場合は、新しい<filesystem>ヘッダーを使用できます。そこに例が示すように:知られているファイルについては

#include <iostream> 
#include <filesystem> 
namespace fs = std::filesystem; 
int main() 
{ 
    std::cout << "Current path is " << fs::current_path() << '\n'; 
} 

を、以下を使用することができる。

#include <iostream> 
#include <filesystem> 
#include <string> 

namespace fs = std::filesystem; 
int main() 
{ 
    std::string fileName("foo.txt"); // From example in question 
    auto filePath = fs::path(fileName); 
    std::cout << "Absolule path for " << fileName << " is " << fs::absolute(filePath) << '\n'; 
} 

注:私は実際にこれを上確認するためのC++ 17コンパイラを持っていません。 ..

あなたが以前のC++のバージョンのためのソリューションをしたい場合は、boost::filesystemを試してみてください。

boost::filesystem::path full_path(boost::filesystem::current_path()); 
std::cout << "Current path is : " << full_path << std::endl; 
+0

OPは、実行可能ファイルではなく、 'fileName'のフルパスを知りたがっていました。 – Rakete1111

+0

@ Rakete1111はい、fileNameなどの完全なパスを知りたかったのです。C:\ Directory \ fileName –

+0

OK、完全パスを取得するためのテストされていないコードで更新されました。 –

関連する問題