Pagina 1 di 1

[c++]apertura di un file!

MessaggioInviato: ven mar 30, 2007 11:15 pm
da vale461mito
sto sviluppando un codice in c++, la classica rubrica, ed ho un problema con l'apertura del file rubrica.txt.
ecco vi posto qui il mio codice magari mi date una mano!
Codice: Seleziona tutto

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//rubrica implementata con la classe fstream

struct rubrica
{
   char name[20];
   char surn[20];
   char city[20];
   char tele[20];
   char addr[20];
   char mail[20];
};
rubrica r;
fstream f;   //oggetto istanziato
int i; //variabile contatore

void print_file();
void search_bin();
void insert();
void cancella();

int main()
{
   int choose, flag = 0;
   char r;
   //clrscr();

   cout<<"Programma realizzato da COTUGNO COSIMO"<<endl;
   cout<<"4^B inf"<<endl;
   cout<<"Premi un tasto>>>";
   getch();
   do
   {
      //clrscr();
      cout<<"Rubrica:"<<endl;
      cout<<"1.Inserimento;"<<endl;
      cout<<"2.Ricerca;"<<endl;
      cout<<"3.Stampa;"<<endl;
      cout<<"4.Cancellazione;"<<endl;
      cout<<"0.Uscita."<<endl;
      cout<<"Select your favourite options:\t";
      cin>>choose;
      switch(choose)
      {
         case 1:
            insert();
            break;
         case 2:
            search_bin();
            break;
         case 3:
            print_file();
            break;
         case 4:
            //cancella();
            break;
         case 0:
            flag = 1;
            exit(0);
            break;
         default:
            cout<<"Error!";
            break;
      }
   }while(!flag);
    return (0);
}

void insert()
{

   f.open("rubrica.txt", ios::app);
   if(f.fail())
   {
      cout<<"\nErrore nell'apertura del file";
   }
   else
   {
      cout<<"\nInserire il nome:\t";
      gets(r.name);
      f.write((char*) & (r.name), sizeof(r.name));
      cout<<"\nInserire il cognome:\t";
        gets(r.surn);
      f.write((char*) & (r.surn), sizeof(r.surn));
      cout<<"\nInserire la citt…:\t";
      gets(r.city);
      f.write((char*) & (r.city), sizeof(r.city));
      cout<<"\nInserire il telefono:\t";
      gets(r.tele);
      f.write((char*) & (r.tele), sizeof(r.tele));
      cout<<"\nInserire l' indirizzo:\t";
      gets(r.addr);
      f.write((char*) & (r.addr), sizeof(r.addr));
      cout<<"\nInserire l' indirizzo di posta elettronica:\n";
      gets(r.mail);
      f.write((char*) & (r.mail), sizeof(r.mail));
      f.close();
       }
}
void print_file()
{
      f.open("c:\\rubrica.txt", ios::in|ios::out|ios::binary);
      cout<<"\nStampa a video del file:\n";
      f.clear();
      while(f.read((char*) & r, sizeof(r)))
      {
        cout<<"nome:\t"<<r.name<<endl;
        cout<<"cognome:\t"<<r.surn<<endl;
        cout<<"indirizzo:\t"<<r.addr<<endl;
        cout<<"citta':\t"<<r.city<<endl;
        cout<<"telefono:\t"<<r.tele<<endl;
        cout<<"mail:\t"<<r.mail<<endl;
           getch();
      }
      f.close();
      cout<<"\n---Fine del file---";
      getch();
}
int filesize()
{
   f.seekg(0, ios::end);
   int n=f.tellg();
   n=sizeof(rubrica);
   return n;
}
void search_bin()
{
   char aux[30];
   f.open("c:\\rubrica.txt", ios::in|ios::out);
   if(f.fail())
   {
      cout<<"\nFile non trovato";
      getch();
   }
   else
   {
      cout<<"\nInserire Cognome:";
      cin>>aux;
      cin.ignore(80, '\n');
      int trov=0;
      int inf=0, sup=filesize()-1;
      while(inf<=sup && !trov)
      {
         i=inf+sup/2;
         f.seekg(i*sizeof(rubrica), ios::beg);
         f.read((char*)&r, sizeof(r));
         if(strcmp(aux, r.surn)>0)
         {
            inf=i+1;
         }
         else
         {
            if(strcmp(aux, r.surn)<0)
            {
               sup=i-1;
            }
            else
            {
               trov=1;
            }
         }
      }
      if(trov)
      {
         cout<<"cognome:\t"<<r.surn<<"\n";
         cout<<"nome:\t"<<r.name<<"\n";
         cout<<"citta':\t"<<r.city<<"\n";
         cout<<"indirizzo:\t"<<r.addr<<"\n";
         cout<<"telefono:\t"<<r.tele<<"\n";
         cout<<"mail:\t"<<r.mail<<"\n";
      }
      else
      {
         cout<<"\nNon trovato";
      }
      getch();
   }
}

la compilazione la effettuo con il code::blocks v 1.0 che sfrutta il compilatore mingw.
e al momento della compilazione ottengo sempre questo:
Compiling: L:\informatica\06-07\RUBRICA2.CPP
In file included from C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/backward/iostream.h:31,
from L:\informatica\06-07\RUBRICA2.CPP:1:
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
L:\informatica\06-07\RUBRICA2.CPP:183:2: warning: no newline at end of file
Linking console executable: L:\informatica\06-07\RUBRICA2.exe
Process terminated with status 0 (0 minutes, 7 seconds)
0 errors, 2 warnings

datemi una mano! please![/b]

MessaggioInviato: sab mar 31, 2007 5:02 pm
da Silver Black
Non vedo errori, solo avvisi (warnings). [...]
Vuoi togliere i warning?

MessaggioInviato: sab mar 31, 2007 6:50 pm
da vale461mito
si ok questo è vero, non ci sono errori ma solo warnings ma in compenso quando cerco di aprire il file, rubrica.txt, non riesco ad aprirlo, nemmeno se metto la path completa e cioè c:\\rubrica.txt;
eppure il file esiste!!e invece mi dice che non lo trova, mbo!
aaa aiuto!

MessaggioInviato: dom apr 01, 2007 12:01 am
da Silver Black
vale461mito ha scritto:non riesco ad aprirlo, nemmeno se metto la path completa e cioè c:\\rubrica.txt;
eppure il file esiste!!


Ehi, chi ti ha detto di scrivere il path in quel modo? (path = percorso, quindi è maschile). Usa:

Codice: Seleziona tutto
c:\rubrica.txt


E aggiungi un ritorno a capo a fine file rubrica.txt, così dovresti eliminare un warning.

MessaggioInviato: dom apr 01, 2007 11:18 am
da Ices_Eyes
Silver Black ha scritto:
vale461mito ha scritto:non riesco ad aprirlo, nemmeno se metto la path completa e cioè c:\\rubrica.txt;
eppure il file esiste!!


Ehi, chi ti ha detto di scrivere il path in quel modo? (path = percorso, quindi è maschile). Usa:

Codice: Seleziona tutto
c:\rubrica.txt


E aggiungi un ritorno a capo a fine file rubrica.txt, così dovresti eliminare un warning.

In realtà la newline alla fine del file deve metterla in rubrica2.cpp [:)]

Per quanto riguarda il file teoricamente, salvo nuove cose del, quando lo usavo io, bisognava mettere la doppia \ nel file, o, in alternativa, usare la / [:)]

MessaggioInviato: dom apr 01, 2007 12:39 pm
da Silver Black
Sì certo, il rubrica.cpp! Ecco cosa si ottiene a lavorare il sabato sera! [:p]

E in effetti dovresti avere ragione anche sul doppio back slash, essendo infatti un carattere di escape speciale, dovrebbe essere raddoppiato.
Il mio C è proprio arrugginito! [acc2]

MessaggioInviato: mar apr 03, 2007 5:59 pm
da vale461mito
forse non mi sono fatto capire bene da voi, comunque il problema è qui:

Codice: Seleziona tutto

void insert()
{

   f.open("rubrica.txt", ios::app);
   if(f.fail())
   {
      cout<<"\nErrore nell'apertura del file";
   }
.....



anche se metto il path completo cosi come mi avete suggerito voi, la situazione non cambia! se ne va sempre nel ramo if e mai nell'else nonostante il file sia presente, capito non riesco ad aprirlo nonostante abbia messo il file nella directory che specifico! spero di essere stato chiaro!

MessaggioInviato: mar apr 03, 2007 6:34 pm
da Silver Black
vale461mito ha scritto:anche se metto il path completo cosi come mi avete suggerito voi, la situazione non cambia! se ne va sempre nel ramo if e mai nell'else nonostante il file sia presente, capito non riesco ad aprirlo nonostante abbia messo il file nella directory che specifico! spero di essere stato chiaro!


Guarda questi due link:

- tutorial Input/Output with files in C++ (inglese)

- C++ I/O - Parte Terza (italiano)

Te gusta hombre? [;)]