std文件流的相对路径

时间:2013-04-28 17:18:32

标签: c++

是否可以提供根文件夹,在此之后只有std :: ifstream和std :: ofstream的相对路径?

例如:

SetFileStreamRootFolder("C:/");
std::ifstream stream("isample.txt"); //C:\isample.txt file
std::ofstream stream("osample.txt"); //C:\osample.txt file

3 个答案:

答案 0 :(得分:2)

您可以定义自己的方法,该方法知道工作目录,并在文件名前添加正确的字符串。

std::string prependFilePath(const std::string &filename);

然后用

构造一个流
stream(prependFilePath("isample.txt").c_str());

示例:

std::string prependFilePath(const std::string &filename)
{
    // The path can be relative or absolute
    return "../" + filename;
}

在实际实现中,您应该将路径(例如:../)存储在const std::string成员中而不是对其进行硬编码,并且此方法可能是获取静态修饰符的良好候选者(真正的帮助/实用方法)。

答案 1 :(得分:2)

如果你写一个函数,是的。
fstream - 对象不会对您施加任何内容,您可以指定相对路径或绝对路径。

Cplusplus.com州:

Parameters:
filename

String with the name of the file to open.
Specifics about its format and validity 
depend on the library implementation and running environment.

答案 2 :(得分:2)

当然,使用Boost.Filesystem

#include <boost/filesystem.hpp>
...
namespace fs = boost::filesystem;
fs::current_path("C:/");

文件系统或类似的东西将被包含在标准库中。 VS2012包括初步实施。因此,如果您没有Boost,并且您不想安装它,则可以使用它。

#include <filesystem>
...
namespace fs = std::tr2::sys;
fs::current_path(fs::path("C:/"));