次のように私は、ファイルストリームを作成しています:既存のファイルへのパスを取得する方法は?
ofstream myfile;
myfile.open(fileName);
は今どのように私はfileName
という名前のファイルのフルパスを得るのですか? fileName
は絶対パスではなく、相対パスにすることができます。
アイデア?
次のように私は、ファイルストリームを作成しています:既存のファイルへのパスを取得する方法は?
ofstream myfile;
myfile.open(fileName);
は今どのように私はfileName
という名前のファイルのフルパスを得るのですか? fileName
は絶対パスではなく、相対パスにすることができます。
アイデア?
ストリームを開くために使用されるパスを取得する方法はありません。 fileName
を自分で追跡する必要があります。
編集:質問は私がそれに答えてから編集されています。絶対パスを相対パスから取得することは、C++で可能です。 std::filesystem::absoluteを参照してください。
私は家庭でこれをやっていますが、大学で... Profesorは保存されたファイルへのパスを生成することを私たちに求めています。他の方法はないと確信していますか? –
@IgorBeracka [std :: filesystem](http://en.cppreference.com/w/cpp/experimental/fs)は、ファイルシステムに関する新しい機能を提供します。私は100%まだそれに精通していないが、私は今あなたがstd :: ofstreamからパスを回復させるような機能はありません。 –
@IgorBeracka編集した質問に対する回答を更新しました。 –
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;
OPは、実行可能ファイルではなく、 'fileName'のフルパスを知りたがっていました。 – Rakete1111
@ Rakete1111はい、fileNameなどの完全なパスを知りたかったのです。C:\ Directory \ fileName –
OK、完全パスを取得するためのテストされていないコードで更新されました。 –
あなたがC++ 17を使用することはできますか? – Rakete1111
visual studio15がインストールされており、サポートする任意のコードを使用できます –
RTMバージョンのVisual Studio 2017を使用して、/ std:latest(または同様のオプション)をコンパイルして実験的なC++ 17サポートを取得する必要があります。 – Rakete1111