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