我试图使用我在 C++ 中学到的关于文件和资源处理的知识:我想编写一个类似diff
的实用程序。
这是我的最新版本
#include <iostream>
#include <cstdlib>
#include <fstream>
int main(int argc, char* argv[])
{
if(argc!=3)
{
std::cout << "error: 2 arguments required, now exiting ..." << std::endl;
exit (EXIT_FAILURE);
}
std::ifstream file_1(argv[1]);
std::ifstream file_2(argv[2]);
if( file_1.fail() || file_2.fail() )
{
std::cout << "error: can't open files, now exiting ..." << std::endl;
exit (EXIT_FAILURE);
}
std::string dummy_1;
std::string dummy_2;
while(!file_1.eof()) // dummy condition
{
std::getline(file_1,dummy_1);
std::getline(file_2,dummy_2);
std::cout << ((dummy_1==dummy_2) ? "= " : "# ") << dummy_1 << std::endl << " " << dummy_2 << std::endl;
}
return(0);
}
这是我的指导方针:
- 比较2个文件
- 用户必须将这 2 个文件的名称直接传递给可执行文件,只有这 2 个参数
- 尽可能多地涵盖C++ 中的错误处理
- 尽量避免平台特定的步骤或不可移植的代码
我的实际问题是我不知道如何有效地改善我的假人状况。现在,while 迭代只遵循第一个传递文件的长度,我想显然在两个文件中一直向下走并解决这个问题,而不会引入额外的 cicle 之类的过度杀伤力来获取和比较这两个文件的长度做真正的比较。
我也想知道我的方法是否可以被认为是安全的。
最终,我也可以接受提出使用 boost 库的解决方案的答案,因为它们非常便携,而且我已经知道我会出于其他原因使用它们。
谢谢。