OVH Cloud OVH Cloud

probleme avec namespace(?) et visual studio .net 2003

13 réponses
Avatar
Flzw
Bonjour,

j'avais ce bout de code simple simple sur visual c++ 6 qui fonctionnait
parfaitement :

ifstream* replayfile = new ifstream;
replayfile->open( FileName, ios::in | ios::nocreate | ios::binary);

Sur vc++ .net 2003
( #include <fstream.h> ne passant plus je mets #include <fstream>
il me dit que ifstream n'est pas declaré.
Je pense donc a mettre "using std::ifstream"
ifstream est enfin reconnu mais il me met une autre erreur :

error C2653: 'ios' : n'est pas un nom de classe ni d'espace de noms.

et il me dit egalement que "in" "nocreate" et "binary" ne sont pas definis.
J'essais de rajouter "using std::ios;"

mais il me donne l'erreur suivante

error C2039: 'nocreate' : n'est pas membre de
'std::basic_ios<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]

Voila ou j'en suis, je ne trouve pas de solutions.

Note : j'ai testé en mettant juste "using namespace std", ca ne marche pas
mieux

Merci d'avance.

3 réponses

1 2
Avatar
kanze
Fabien LE LEZ wrote in message
news:...
On 14 Jan 2004 00:25:56 -0800, wrote:

w truncate to zero length or create text file for writing
w+ truncate to zero length or create file for update


J'ai bien du mal à saisir la différence entre ces deux-là...


En effet, ce n'est pas d'une lucidité particulière. Je crois que dans ce
cas-ci, « for writing » signifie que je ne peux qu'écrire, tandis que
« for update » signifie que je peux et lire et écrire.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
Loïc Joly
wrote:

Loïc Joly wrote in message
news:<bu1t8o$fei$...

[...]


Je ne sais pas ce que dit la documentation Dinkumware.


Elle dit :
The member function endeavors to open the file with filename filename,
by calling fopen(filename, strmode). Here strmode is determined from
mode & ~(ate & | binary):

* ios_base::in becomes "r" (open existing file for reading).
* ios_base::out or ios_base::out | ios_base::trunc becomes "w"
(truncate existing file or create for writing).
* ios_base::out | ios_base::app becomes "a" (open existing file for
appending all writes).
* ios_base::in | ios_base::out becomes "r+" (open existing file for
reading and writing).
* ios_base::in | ios_base::out | ios_base::trunc becomes "w+"
(truncate existing file or create for reading and writing).
* ios_base::in | ios_base::out | ios_base::app becomes "a+" (open
existing file for reading and for appending all writes).

La norme mappe
les modes d'ouverture en modes de fopen. En faisant l'abstraction du
binaire (qui ajoute chaque fois un 'b' dans le mode de fopen), on peut
obtenir des modes "w", "a", "r", "r+" et "w+". D'après ISO 9899:1990
(mais ça n'a pas changé depuis C90), §7.19.5.3/3 :

r open text file for reading
w truncate to zero length or create text file for writing
a append; open or create text file for writing at end-of-file
r+ open text file for update (reading and writing)
w+ truncate to zero length or create file for update

Ce qui manque un peu de précison (peut-être exprès, pour permettre
l'implémentation à conformer aux possibilités de la plateforme).
Surtout, il n'est jamais *interdit* de créer un fichier (et il me semble
systèmatiquement, même avec "r"). Et il y a toujours la question :
comment ouvrir un ficher pour écriture et lecture sans le modifier, mais
en le créant s'il n'existe pas ? Est-ce que ce n'est pas la
fonctionnalité souhaitée par "r+" ?


J'avais l'impression que la présence explicite de "or create" pour
d'autres valeur de paramètres impliquait que l'abscense de ce "or
create" indiquait qu'il ne pouvait pas y avoir création de fichier.

--
Loïc

Avatar
kanze
Loïc Joly wrote in message
news:<bu73md$f83$...
wrote:


[...]
La norme mappe les modes d'ouverture en modes de fopen. En faisant
l'abstraction du binaire (qui ajoute chaque fois un 'b' dans le mode
de fopen), on peut obtenir des modes "w", "a", "r", "r+" et "w+".
D'après ISO 9899:1990 (mais ça n'a pas changé depuis C90),
§7.19.5.3/3 :

r open text file for reading
w truncate to zero length or create text file for writing
a append; open or create text file for writing at end-of-file
r+ open text file for update (reading and writing)
w+ truncate to zero length or create file for update

Ce qui manque un peu de précison (peut-être exprès, pour permettre
l'implémentation à conformer aux possibilités de la plateforme).
Surtout, il n'est jamais *interdit* de créer un fichier (et il me
semble systèmatiquement, même avec "r"). Et il y a toujours la
question : comment ouvrir un ficher pour écriture et lecture sans le
modifier, mais en le créant s'il n'existe pas ? Est-ce que ce n'est
pas la fonctionnalité souhaitée par "r+" ?


J'avais l'impression que la présence explicite de "or create" pour
d'autres valeur de paramètres impliquait que l'abscense de ce "or
create" indiquait qu'il ne pouvait pas y avoir création de fichier.


Littéralement, tout ce qu'il dit, c'est que la création n'est pas
obligatoire. Je crois que l'intention, c'est qu'on fasse ce qui est le
plus naturel sur le système -- si un open au niveau de système crée
systèmatiquement un fichier, ainsi soit-il.

En général, tout ce qui concerne la gestion des fichiers est assez
lachement spécifié, de façon à laisser un maximum de liberté aux
implémenteurs de faire ce qui est naturel sur leur plateforme.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


1 2