Ciao, innanzi tutto grazie della risposta
ti posto in seguito una parte del codice.. come puoi notare, ho considerato un file binario e ho usato l'operatore ">>"(lettura) e "<<"(scrittura)... Questo mi ha portato ad avere una lunga discussione con la mia prof. di informatica, che riteneva inappropriato l'uso degli operatori ">>" "<<" in un contesto in cui si operava su file binari..
Non ce bisogno di dirti che io mi sono trovato in totale disaccordo con lei (il programma mi funziona una meraviglia).. e vorrei dei pareri da persone competenti in materia.
Quindi, l'uso di questi operatori è scorretto? può comportare dei problemi a livello di gestione di stringhe? sarebbe meglio usare le funzioni file.write e file.read oppure sono praticamente identici?

codice:
void Visualizza()
{
    bool VerificaData(int G, int M, int A);
  
    File.open("Dati.dat", ios::in|ios::binary);
  
    do
    {
        Verifica=true;
        cout << "Inserisci la data di oggi: (GG/MM/AAAA)   " << endl;
        cout << "Giorno: ";
        cin >> Data[2].Giorno;
        cout << "Mese: ";
        cin >> Data[2].Mese;
        cout << "Anno: ";
        cin >> Data[2].Anno;
    
        VerificaData(Data[2].Giorno,Data[2].Mese,Data[2].Anno);
    }while(Verifica==false);
    
      while(File.eof()!=true)  //quando termina il file, esci dal ciclo
      {
        Posiz=File.tellg();
        File>>Data[3].Giorno>>Data[3].Mese>>Data[3].Anno;
        File.ignore(504, '\n');
	
	if((Data[2].Giorno==Data[3].Giorno) && (Data[2].Mese==Data[3].Mese) && (Data[2].Anno==Data[3].Anno))
	{
	    Trovato=true;
	    File.seekg(Posiz);
	    File.ignore(17, '#');
	    File.getline(DescrizioneImpegno.Descrizione,500);
	    cout << DescrizioneImpegno.Descrizione << endl; 
	    break;
	}
      }
      
      if(Trovato==false)
      {
	  cout << "Non è stato trovato nessun impegno per questo giorno!" << endl;
      }
      
      File.close();
      
      main();
}

void Carica()
{
    bool VerificaData(int G, int M, int A);
    
    do
    {
        Verifica=true;
        cout << "Inserisci la data dell'impegno: (GG/MM/AAAA)   " << endl;
        cout << "Giorno: ";
        cin >> Data[0].Giorno;
        cout << "Mese: ";
        cin >> Data[0].Mese;
        cout << "Anno: ";
        cin >> Data[0].Anno;
    
        VerificaData(Data[0].Giorno,Data[0].Mese,Data[0].Anno);
    }while(Verifica==false);
    
    File.open("Dati.dat", ios::out|ios::app|ios::binary);
    ScriviData(Data[0].Giorno,Data[0].Mese,Data[0].Anno);
    
    cout << endl << "Descrizione Impegno: " << endl;
    cout << "Ora Scadenza: (OO:MM) ";
    cin >> DescrizioneImpegno.Ora;
    File << DescrizioneImpegno.Ora << " ";
    cout << "Descrizione: (aggiungere '+ ' prima della scrittura) (max: 500ch) " << endl;
    cin >> DescrizioneImpegno.Descrizione; 
    gets(DescrizioneImpegno.Descrizione); //accetta gli spazi;
    File << " #" << DescrizioneImpegno.Descrizione << "#                                                                      " << endl;
    
    
    File.close();
    
    main();
        
}