DevC++ has bugged library?

hi,
today i showed a my program written on ubuntu and tested there. my program should simply read and write with binary files. when i tried it in my pc, it worked, but when i showed it to the prof, the program didn't work.
i used dev c++ to compile on windows, but sometimes it worked and sometimes it didn't, for example at the instruction "stream f; f.open("file.bin",ios::out|ios::binary);" it didn't have success, so f get the value null, but on ubuntu it worked. also with seekg i had problems, with same input, on ubuntu it worked, but in dev not.
also a my friend had a problem, it opened and wrote in a file, but the file was just created, but not written.
so i wonder if my program was bugged (but i doubt it) or it was dev which had bugged library, are they?
and if it is, do you have any documentation about this bug?

p.s. my code is this :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include<iostream>
#include<fstream>
#include<vector>
#include<cstring>
#include<cstdlib>
using namespace std;

const int Lenght=20;

class libro{
	private:
		int isbn, copieDisponibili;
		char titolo[Lenght],autore[Lenght];
	public:
		libro(){}
		libro(int _isbn,int _copieDisponibili,char _titolo[],char _autore[])
			{ set(_isbn,_copieDisponibili,_titolo,_autore); }
		void set(int _isbn,int _copieDisponibili,char _titolo[],char _autore[])
			{ isbn=_isbn; copieDisponibili=_copieDisponibili; strcpy(titolo,_titolo); strcpy(autore,_autore); }
		int getIsbn(){ return isbn; }
		void visu()
			{ cout<<"Isbn: "<<isbn<<"\nCopie disponibili: "<<copieDisponibili<<"\nTitolo: "<<titolo<<"\nAutore: "<<autore<<"\n\n"; }
};
class biblioteca{
	private:
		vector <libro> scaffale;
		char indirizzo[100];
		fstream file;
	public:
		/* gestione input*/
		void setIndirizzo(char _indirizzo[]) { strcpy(indirizzo,_indirizzo); }
		void aggiungiLibro(libro _libro) { scaffale.push_back(_libro); }
		int cercaLibroDaIsbn(int _isbn) { for (int i=0;i<scaffale.size();i++) if (scaffale.at(i).getIsbn()==_isbn) return i; return -1; }
		
		
		
		
		
		/* gestione main loop */
		int sceltaMenu(){
			cout<<"    ------ MENU -----\n";
			cout<<"0) imposta indirizzo \n";
			cout<<"1) carica dati da file testo \n";
			cout<<"2) carica i dati da consol \n";
			cout<<"3) visualizza un libro dato l'isbn \n";
			cout<<"4) scrivi su file binario \n";
			cout<<"5) leggi da file binario \n";
			cout<<"6) gestisci singolo record\n";
			
			cout<<"^) esci\n";
			int s; cin>>s; 
			system("clear");
			return s;
		}
		
		void menu()
		{
			bool f=true;
			while(f){
				switch(sceltaMenu())
				{
					case 0: gestioneImpostaIndirizzo(); break;
					case 1: gestioneLetturaDaFileTxT(); break;
					case 2: gestioneAggiungiLibro(); break;
					case 3: gestioneRicercaLibro(); break;
					case 4: gestioneScritturaBinaria(); break;
					case 5: gestioneLetturaBinaria(); break;
					case 6: gestioneRecordSingolo(); break;
					
					default: f=false; break;
				}
			}
		}
		
		/* gestione interfaccia utente*/
		void gestioneImpostaIndirizzo(){
			cout<<"inserire l'indirizzo del file : "; cin>>indirizzo;
		}
		libro letturaDatiLibroDaConsol(){
			int _isbn,_numero;
			char _titolo[Lenght],_autore[Lenght];
			cout<<"inserire i dati del libro: \n   isbn : ";  cin>>_isbn;
			cout<<"   numero copie : "; cin>>_numero;
			cout<<"   titolo : "; cin>>_titolo;
			cout<<"   autore : "; cin>>_autore;
			return *(new libro(_isbn,_numero,_titolo,_autore));
		}
		void gestioneAggiungiLibro(){ 
			aggiungiLibro(letturaDatiLibroDaConsol());	
		}
		void gestioneRicercaLibro(){
			int _isbn;
			cout<<"inserire l'isbn del libro o -1 : "; cin>>_isbn;
			if (_isbn==-1) for (int i=0;i<scaffale.size();i++) scaffale.at(i).visu(); 
			else { _isbn=cercaLibroDaIsbn(_isbn); if (_isbn==-1) cout<<"libro non trovato\n"; else scaffale.at(_isbn).visu(); }
		}
		
		
		/* gestione lettura da file */
		void gestioneLetturaDaFileTxT(){
			file.open(indirizzo,fstream::in);
			if (file==NULL) { cout<<"file non trovato, operazione terminata\n"; return; }
			int _isbn,_numero; char _titolo[Lenght],_autore[Lenght];
			while (!file.eof()){
				file>>_isbn>>_numero>>_titolo>>_autore;
				scaffale.push_back(*(new libro(_isbn,_numero,_titolo,_autore)));
			}
			scaffale.pop_back();
			file.close();
		}
		void gestioneScritturaBinaria(){
			file.open(indirizzo,fstream::out|fstream::binary);
			cout<<scritturaBinaria();
			file.close();
		}
		void gestioneLetturaBinaria(){
			file.open(indirizzo,fstream::in|fstream::binary);
			cout<<letturaBinaria();
			file.close();
		}	
		void gestioneRecordSingolo(){
		    file.close();
			cout<<"inserire la posizione del record : ";
			int pos; cin>>pos; pos--; pos*=sizeof(libro);
			file.open(indirizzo,fstream::in|fstream::binary);
			//file.seekg(pos,ios::beg);
			libro temp; file.read((char*)&temp,sizeof(libro));
			temp.visu();
			file.close();
			cout<<"1) scrivere\n^) esci\ninserire la scleta : ";
			int s; cin>>s; if (s!=1) return;
			file.open(indirizzo,fstream::out|fstream::app|fstream::binary);
			file.seekg(sizeof(libro)*pos,ios::beg);
			temp=letturaDatiLibroDaConsol();
			file.write((char*)&temp,sizeof(libro));
			file.close();
		}
		
		
		
		/*lettura e scrittura binaria PRIVATA*/
	private:
		const char* scritturaBinaria(){
			if (file==NULL) return "Errore: file non trovato.\n";
			file.write((char*)&(scaffale.front()),sizeof(libro)*scaffale.size());
			return "scrittura su file binario avvenuta\n";
		}	
		const char* letturaBinaria(){
			if (file==NULL) return "Errore: file non trovato.\n";
			libro temp;
			while (!file.eof())
			{
				file.read((char *) &temp,sizeof(temp));
				scaffale.push_back(temp);
			}
			scaffale.pop_back();
			return "lettura da file binario avvenuta\n";
		}
};


int main()
{
	biblioteca bib;
	bib.menu();
	return 0;
}


thanks for helping
Dunno about Linux or Ubuntu, but in Windows you have the file system secured. This means that you need special permissions to write to certain folders in the hard disk. If your program ran from a location where a standard user doesn't have write access, then your program will fail.
it actually had to write in an usb, which had no restriction
Topic archived. No new replies allowed.