如何link将文本文件输入到C++程序
How to link input text file to C++ program
我正在尝试在 CLion 中编写一个 C++ 程序来打开、操作和关闭输入文件和输出文件。输入文件是一个 .txt 文件,但是当我执行程序时,它找不到输入文件,即使它与它正在执行的 .cpp 程序位于同一目录中。我想知道是否是因为我必须使用 CMake link 输入文件,但不幸的是我不熟悉配置 CMake。我如何 link 将 .txt 文件添加到 C++ 项目?
您不会"link" 将文本文件转换为可执行文件。在 CLion 中,默认行为是将项目二进制文件构建到名为 cmake-build-debug
的文件夹中。您要用作输入的文本文件必须与 .exe
文件位于同一目录中,而不是 .cpp
,因此在这种情况下您需要做的是在前面加上一个 [=15] =] 到文本文件的名称(即...如果您的文件名为 input.txt
,C 代码会说类似
FILE* input_file = fopen("../input.txt", "r");
记得检查 return 代码、错误等
由于各种原因,上述解决方案并不理想;首先,您要对文件名进行硬编码,这充其量是一个巨大的限制,而在最坏的情况下毫无意义。更好的解决方案是通过命令行传入文件名。
#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;
}
这个解决方案仍然不是很好,但是,主要是因为您应该始终清理您的输入,永远不要只接受用户的字符串输入并立即使用它。这是一个巨大的安全责任。我也没有检查 return 代码或任何东西;我只是验证了 argc
是两个。 (请记住,程序总是 argc
至少等于 1
,因为第一个参数是程序的名称。)
要回答您的实际问题(您提出的问题,但不一定是您需要回答的问题),您可以使用 CMake 的 find_file
function 到 "link"文件。您实际上并没有链接任何东西,实际上,find_file
函数只是 return 一个命名文件的完整路径,但是您可以将此信息作为参数传递给您的程序,如前所述。
实际上,您可以使用 CMake 做的事情比显而易见的要多; here是他们的文件相关功能的文档。
您也可以使用 execute_process
函数直接从 CMake 执行新建的程序。该函数实际上直接接受一个 INPUT_FILE
参数,因此您可以为输入文件的路径设置一个变量,使用 find_file
的结果设置它,然后使用输入文件直接执行程序 execute_process
.
我正在尝试在 CLion 中编写一个 C++ 程序来打开、操作和关闭输入文件和输出文件。输入文件是一个 .txt 文件,但是当我执行程序时,它找不到输入文件,即使它与它正在执行的 .cpp 程序位于同一目录中。我想知道是否是因为我必须使用 CMake link 输入文件,但不幸的是我不熟悉配置 CMake。我如何 link 将 .txt 文件添加到 C++ 项目?
您不会"link" 将文本文件转换为可执行文件。在 CLion 中,默认行为是将项目二进制文件构建到名为 cmake-build-debug
的文件夹中。您要用作输入的文本文件必须与 .exe
文件位于同一目录中,而不是 .cpp
,因此在这种情况下您需要做的是在前面加上一个 [=15] =] 到文本文件的名称(即...如果您的文件名为 input.txt
,C 代码会说类似
FILE* input_file = fopen("../input.txt", "r");
记得检查 return 代码、错误等
由于各种原因,上述解决方案并不理想;首先,您要对文件名进行硬编码,这充其量是一个巨大的限制,而在最坏的情况下毫无意义。更好的解决方案是通过命令行传入文件名。
#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;
}
这个解决方案仍然不是很好,但是,主要是因为您应该始终清理您的输入,永远不要只接受用户的字符串输入并立即使用它。这是一个巨大的安全责任。我也没有检查 return 代码或任何东西;我只是验证了 argc
是两个。 (请记住,程序总是 argc
至少等于 1
,因为第一个参数是程序的名称。)
要回答您的实际问题(您提出的问题,但不一定是您需要回答的问题),您可以使用 CMake 的 find_file
function 到 "link"文件。您实际上并没有链接任何东西,实际上,find_file
函数只是 return 一个命名文件的完整路径,但是您可以将此信息作为参数传递给您的程序,如前所述。
实际上,您可以使用 CMake 做的事情比显而易见的要多; here是他们的文件相关功能的文档。
您也可以使用 execute_process
函数直接从 CMake 执行新建的程序。该函数实际上直接接受一个 INPUT_FILE
参数,因此您可以为输入文件的路径设置一个变量,使用 find_file
的结果设置它,然后使用输入文件直接执行程序 execute_process
.