/**
 * @file testFlotFichier_ES.cpp
 * Projet sem05-td-Cpp2
 * @author l'équipe pédagogique 
 * @version 1 17/01/06
 * @brief corrige du TD n°5 - Exercice 2
 * Structures de données et algorithmes - DUT1 Paris 5
 */

#include <iostream>
using namespace std;

#include "FlotFichierES.h"

/**
 * @brief Tests des fonctions de FlotFichier_ES.hpp
 */
int main() {
	int choix;
	const int MAX = 80;
	char nomS[MAX], nomC[MAX];

	/**
 	* @brief Tests de la fonction de copie d'un fichier source dans un fichier cible
 	* et vérification de cette copie par comparaison des deux fichiers
 	*/
	cout <<"1. Copie d'un fichier source dans un fichier cible" << endl;
	
	/* Ouverture des deux fichiers source (en lecture) et cible (en écriture) */
	cout << "Nom du fichier source : ";
	/* COM1. Contrôle de saisie d'une chaine de caractère de longueur MAX 
	 * la saisie ne dépasse pas la longueur du tableau de caractères */
	cin.width(MAX);
	cin >> nomS;
	/* Fin COM1. */
	
	/* il n'est pas nécessaire d'ouvrir le fichier en mode ios::binary. 
	 * Ce mode n'a une influence que pour les opérations d'E/S formatées 
	 * (<<, >>, getline, etc) pour lesquelles les caractères de fin de ligne
	 * ne sont plus convertis en fonction du système d'exploitation mais 
	 * laissés tels que. Les opérations binaires d'E/S read et write ne font
	 * jamais de conversion automatique quel que soit le mode d'ouverture.*/
	ifstream fS (nomS, ios_base::in); // ifstream fS (nomS, ios_base::binary); 
	if (fS.fail()){
		cerr << "L'ouverture de " << nomS << " a echoué " << endl;
		exit(1);
	}
  
	cout << "Nom du  fichier cible : ";
	cin.width(MAX);
	cin >> nomC;
	ofstream fC (nomC, ios_base::out);
	if (fC.fail()) {
		cerr << "L'ouverture de " << nomC << " a echoué " << endl;
		fS.close();
		exit(1);
	}

	if (copierParBlocs(fS, fC, 1000))
		cout << "La copie s'est bien passée" << endl;
	else cout << "La copie a echoué" << endl;
	
	fC.close();
	
	cout << "2. Verification de la copie par comparaison des fichiers (source et cible)" << endl; 
	// Reset du fichier source
	fS.seekg(0);
	fS.clear();

	// Ouverture du fichier cible en lecture
	ifstream f2 (nomC, ios_base::in);
	if (f2.fail()){
		cerr << "L'ouverture de " << nomC << " a echoué " << endl;
		exit(1);
	}
	bool idem;
	idem = comparer(fS, f2);
	if (fS.bad() || f2.bad())
		cout << "La comparaison a échoué" << endl;
	else 
		if (idem)
			cout << "Les deux fichiers sont identiques" << endl;
 		else cout << "Les deux fichiers sont différents" << endl;

	fS.close();
	f2.close();
}

