私は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の反復は最初に渡されたファイルの長さに従うだけです。両方のファイルを明らかに下に移動し、前にこの2つのファイルの長さを取得して比較するために、余分なシクルのようなやり過ぎを導入せずにこれを解決したいと思います。実際の比較を行います。
また、私のアプローチが安全であると考えられるかどうかも知りたいです。
最終的には、Boostライブラリは非常に移植性が高く、他の理由で使用することをすでに知っているため、Boostライブラリを使用したソリューションを提案する回答を受け入れることもできます。
ありがとう。