如何将输入文本文件链接到C ++程序

时间:2018-11-08 00:23:15

标签: c++ windows cmake io clion

我正在尝试在CLion中编写一个C ++程序,该程序可以打开,操纵和关闭输入文件和输出文件。输入文件是一个.txt文件,但是当我执行该程序时,即使它与从其执行的.cpp程序位于同一目录中,也找不到该输入文件。我想知道是否是因为我必须将输入文件与CMake链接,但是不幸的是我不熟悉配置CMake。如何将.txt文件链接到C ++项目?

1 个答案:

答案 0 :(得分:0)

您没有将文本文件“链接”到可执行文件。在CLion中,默认行为是将项目二进制文件构建到名为cmake-build-debug的文件夹中。您要用作输入内容的文本文件必须与.exe文件位于同一目录中,而不是.cpp,因此在这种情况下,您需要做一个{{1 }}到文本文件的名称(即,如果您的文件名为../,则C代码将显示类似

input.txt

请记住检查返回码,错误等。


由于多种原因,上述解决方案效果不佳;首先,您要对文件名进行硬编码,这充其量是一个很大的限制,最坏的情况是没有意义的。更好的解决方案是通过命令行传递文件名。

FILE* input_file = fopen("../input.txt", "r");

但是,该解决方案仍然不是很好,主要是因为您应该始终清理输入内容,而不是仅仅接受用户的字符串输入并立即使用它。这是巨大的安全责任。我也没有检查返回码或其他任何东西。我只是确认#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { if (argc != 2) { return EXIT_FAILURE; } FILE* inputFile = fopen(argv[1], "r"); ... return EXIT_SUCCESS; } 是两个。 (请记住,由于第一个参数是程序的名称,因此程序将始终具有至少等于argc的{​​{1}}。)


要回答您的实际问题(虽然不是必须要回答的问题),您可以使用CMake的argc function来“链接”到文件。实际上,您实际上并没有链接任何东西,实际上1函数只是将完整路径返回到命名文件,但是您可以如前所述将这些信息作为参数传递给程序。

实际上,您可以做的比使用CMake可以做的还多。 here是其文件相关功能的文档。

您还可以使用find_file函数从CMake直接执行新建程序。该函数实际上直接采用了find_file参数,因此您可以为输入文件的路径设置一个变量,使用execute_process的结果进行设置,然后使用{直接对输入文件执行程序{1}}。