【问题标题】:using boost file system in boost unit test global fixture error在 boost 单元测试中使用 boost 文件系统全局夹具错误
【发布时间】:2020-03-21 11:12:22
【问题描述】:

我尝试在全局夹具中执行以下行,但它给了我错误。
文件是以下路径:

 D:\\back_up_starting_1_18_2020\\visual_studio_programs_all_last_2020\\visual_studio\\Projects\\c++\\c++_2020_3_17_ninety47\\dukascopy-master\\dukascopy-master\\..\\test\\data\\raw\\GBPJPY\\2012\\11\\03\\01h_ticks.bin

file = fs::canonical(file);

我删除了设置路径的代码,当我删除“..”时,我的代码工作正常
是行文件 = fs::canonical(file);错了???

更新:
我发现问题与 boost 单元测试无关,但与 ifstream 有关。
所以我做了这个简洁的代码来重现这个问题。

// ifstream_arg.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
// ifstream constructor.
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;

int main() {

    std::string filename = "./test.txt";
    //const char * filename = "./test.txt";

    fs::path file(filename);

    file = fs::canonical(file);
    std::cout << filename << '\n';
    std::cout << file.generic_string() << '\n';
    std::cout << file.string() << '\n';
    std::cout << file.string().c_str() << '\n';
    std::cout << file.c_str() << '\n';
    ////filename = ("\\\\?\\" + file.generic_string()).c_str();
    filename = file.generic_string().c_str();
    std::cout << filename << '\n';

    //std::ifstream ifs("test.txt", std::ifstream::in);
    std::ifstream ifs(filename, std::ifstream::binary);

    char c = ifs.get();

    while (ifs.good()) {
        std::cout << c;
        c = ifs.get();
    }

    ifs.close();

    return 0;
}

当我使用文件名作为字符串时,ifstream 工作正常。
但是当我将它用作指向 const char 的指针时,它会出错。
我读了 std::ifstream 的用法,它说 ifstream 可以同时使用字符串和指向 const char 的指针????
我的错误是什么??

【问题讨论】:

    标签: c++ boost ifstream


    【解决方案1】:

    我发现了错误。
    它在行:

    filename = file.generic_string().c_str();
    

    这里从 rhs 返回的指针指向 generic_string() 的结果,该结果在表达式结束时右值被破坏,因此文件名成为悬空指针并发生错误。
    所以我要么将整个 rhs 表达式传递给 ifstream 要么用它设置变量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多