首页 > 解决方案 > 当参数文件位于与当前目录不同的目录中时,不会生成 Ofstream 文件

问题描述

为了编译我的程序,我使用如下的书面 cmake 文件:

cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
project(GARFIELD_SIMULATIONS)

#---Find packages-------------------------------------------------------
find_package(Garfield REQUIRED)
find_package(OpenMP REQUIRED)

#---Build executables-----------------------------------------------------------
add_executable(test1 test1.C)
target_link_libraries(test1 PRIVATE OpenMP::OpenMP_CXX Garfield)

add_executable(test2 test2.C)
target_link_libraries(test2 Garfield)

这编译我的程序没有任何问题。但是,当我运行我的可执行文件时,我在创建输出文件时遇到了问题。具体来说,test1.C 接受一个文件作为输入参数,并通过执行以下操作生成一个输出文件:

string filename = argv[1];
ifstream input(filename, std::ios::in);
double x;
vector<double> xs;
while (input >> x) {
  xs.push_back(x);
}

ofstream output("output_of_"+filename, std::ios::out);
double y;
for (int i = 0; i < xs.size(); i++) {
  y = xs.at(i) + 1;
  output << y << "\t";
}
output.close();

现在,当我尝试传入一个不在我当前目录中的参数时,问题就来了。例如,如果我做这样的事情:

./test1 file1.txt

然后我会得到输出文件。但是,如果我这样做:

./test1 /some/other/directory/file1.txt

我不会得到任何输出文件。我尝试使用 find 搜索输出,但没有返回任何内容。我还是 cmake 的新手,所以如果这很明显,我深表歉意。我尝试使用谷歌,但尚未出现任何有用的信息。任何帮助是极大的赞赏。

标签: c++cmakefile-ioofstream

解决方案


推荐阅读