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);
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);
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);
ifstream* replayfile = new ifstream;
replayfile->open( FileName, ios::in | ios::nocreate | ios::binary);
ifstream* replayfile = new ifstream;
replayfile->open( FileName, ios::in | ios::nocreate | ios::binary);
ifstream* replayfile = new ifstream;
replayfile->open( FileName, ios::in | ios::nocreate | ios::binary);
error C2039: 'nocreate' : n'est pas membre de
'std::basic_ios<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
error C2039: 'nocreate' : n'est pas membre de
'std::basic_ios<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
error C2039: 'nocreate' : n'est pas membre de
'std::basic_ios<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
Loïc Joly writes:
|> Flzw wrote:
|> > error C2039: 'nocreate' : n'est pas membre de
|> > 'std::basic_ios<_Elem,_Traits>'
|> > with
|> > [
|> > _Elem=char,
|> > _Traits=std::char_traits<char>
|> > ]
|> Le nocreate n'existe pas avec les nouveaux streams.
Il n'existait pas de façon générale avec les anciens non plus.
A priori, un vendeur qui le fournissait avec les anciens doit les
fournir avec les nouveaux, à titre d'extension. Au moins qu'il se
moque des ces clients complètement.
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
|> Flzw wrote:
|> > error C2039: 'nocreate' : n'est pas membre de
|> > 'std::basic_ios<_Elem,_Traits>'
|> > with
|> > [
|> > _Elem=char,
|> > _Traits=std::char_traits<char>
|> > ]
|> Le nocreate n'existe pas avec les nouveaux streams.
Il n'existait pas de façon générale avec les anciens non plus.
A priori, un vendeur qui le fournissait avec les anciens doit les
fournir avec les nouveaux, à titre d'extension. Au moins qu'il se
moque des ces clients complètement.
Loïc Joly writes:
|> Flzw wrote:
|> > error C2039: 'nocreate' : n'est pas membre de
|> > 'std::basic_ios<_Elem,_Traits>'
|> > with
|> > [
|> > _Elem=char,
|> > _Traits=std::char_traits<char>
|> > ]
|> Le nocreate n'existe pas avec les nouveaux streams.
Il n'existait pas de façon générale avec les anciens non plus.
A priori, un vendeur qui le fournissait avec les anciens doit les
fournir avec les nouveaux, à titre d'extension. Au moins qu'il se
moque des ces clients complètement.
James Kanze wrote:Loïc Joly writes:
|> Flzw wrote:
|> > error C2039: 'nocreate' : n'est pas membre de
|> > 'std::basic_ios<_Elem,_Traits>'
|> > with
|> > [
|> > _Elem=char,
|> > _Traits=std::char_traits<char>
|> > ]
|> Le nocreate n'existe pas avec les nouveaux streams.
Il n'existait pas de façon générale avec les anciens non plus. A
priori, un vendeur qui le fournissait avec les anciens doit les
fournir avec les nouveaux, à titre d'extension. Au moins qu'il se
moque des ces clients complètement.
J'ai du mal à voir pourquoi.
Autant je suis d'accord pour dire qu'un compilateur qui avait les
anciens flux se doit de toujours les avoir, autant j'ai du mal à voir
ce que tripaouiller les nouveaux flux avec certains éléments des
anciens (et quels éléments, en particulier ?) peut servir.
Soit l'utilisateur veut continuer avec les anciens flux, c'est son
droit, soit il veux passer aux nouveaux et alors présenter des
extensions non portable n'est pas lui rendre service.
Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement de
comportement.
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
James Kanze wrote:
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
|> Flzw wrote:
|> > error C2039: 'nocreate' : n'est pas membre de
|> > 'std::basic_ios<_Elem,_Traits>'
|> > with
|> > [
|> > _Elem=char,
|> > _Traits=std::char_traits<char>
|> > ]
|> Le nocreate n'existe pas avec les nouveaux streams.
Il n'existait pas de façon générale avec les anciens non plus. A
priori, un vendeur qui le fournissait avec les anciens doit les
fournir avec les nouveaux, à titre d'extension. Au moins qu'il se
moque des ces clients complètement.
J'ai du mal à voir pourquoi.
Autant je suis d'accord pour dire qu'un compilateur qui avait les
anciens flux se doit de toujours les avoir, autant j'ai du mal à voir
ce que tripaouiller les nouveaux flux avec certains éléments des
anciens (et quels éléments, en particulier ?) peut servir.
Soit l'utilisateur veut continuer avec les anciens flux, c'est son
droit, soit il veux passer aux nouveaux et alors présenter des
extensions non portable n'est pas lui rendre service.
Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement de
comportement.
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
James Kanze wrote:Loïc Joly writes:
|> Flzw wrote:
|> > error C2039: 'nocreate' : n'est pas membre de
|> > 'std::basic_ios<_Elem,_Traits>'
|> > with
|> > [
|> > _Elem=char,
|> > _Traits=std::char_traits<char>
|> > ]
|> Le nocreate n'existe pas avec les nouveaux streams.
Il n'existait pas de façon générale avec les anciens non plus. A
priori, un vendeur qui le fournissait avec les anciens doit les
fournir avec les nouveaux, à titre d'extension. Au moins qu'il se
moque des ces clients complètement.
J'ai du mal à voir pourquoi.
Autant je suis d'accord pour dire qu'un compilateur qui avait les
anciens flux se doit de toujours les avoir, autant j'ai du mal à voir
ce que tripaouiller les nouveaux flux avec certains éléments des
anciens (et quels éléments, en particulier ?) peut servir.
Soit l'utilisateur veut continuer avec les anciens flux, c'est son
droit, soit il veux passer aux nouveaux et alors présenter des
extensions non portable n'est pas lui rendre service.
Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement de
comportement.
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
En es tu sûr ? J'avoue que les compilateurs C++ dont je me sers me
présentent beaucoup d'extensions portables, dont je me sers allégrément.
Est-ce que tu es sûr que le compilateur C++ doit interdire des threads,
des link dynamiques et l'utilisation d'un GUI ? Ce ne sont, après tout,
que des extensions.
Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement de
comportement.
Comment ?
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
Sauf que s'il les a mis, c'est qu'il en a besoin de la sémantique.
En es tu sûr ? J'avoue que les compilateurs C++ dont je me sers me
présentent beaucoup d'extensions portables, dont je me sers allégrément.
Est-ce que tu es sûr que le compilateur C++ doit interdire des threads,
des link dynamiques et l'utilisation d'un GUI ? Ce ne sont, après tout,
que des extensions.
Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement de
comportement.
Comment ?
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
Sauf que s'il les a mis, c'est qu'il en a besoin de la sémantique.
En es tu sûr ? J'avoue que les compilateurs C++ dont je me sers me
présentent beaucoup d'extensions portables, dont je me sers allégrément.
Est-ce que tu es sûr que le compilateur C++ doit interdire des threads,
des link dynamiques et l'utilisation d'un GUI ? Ce ne sont, après tout,
que des extensions.
Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement de
comportement.
Comment ?
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
Sauf que s'il les a mis, c'est qu'il en a besoin de la sémantique.
wrote:En es tu sûr ? J'avoue que les compilateurs C++ dont je me sers me
présentent beaucoup d'extensions portables, dont je me sers
allégrément. Est-ce que tu es sûr que le compilateur C++ doit
interdire des threads, des link dynamiques et l'utilisation d'un GUI
? Ce ne sont, après tout, que des extensions.
J'avoue avoir moins de problème avec des extentions se présentant sous
forme de nouvelles fonctions/classes qu'avec des extensions se
présentant comme nouvelle valeur possible d'un paramètre de fonction.
J'ai un peu plus l'impression que le second cas peut arriver dans un
programme par étourderie et non par choix plus facilement que le
premier.Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement
de comportement.
Comment ?
C'est ce que j'essaye d'expliquer dessus, mais j'ai du mal me faire
comprendre, je réessaye :
Anciens flux :
- Rien : On crée s'il n'existe pas
- nocreate : On ne crée pas s'il n'existe pas
Nouveaux flux sans nocreate :
- On ne crée pas s'il n'existe pas
(Je n'ai pas retrouvé de ref dans mon exemplaire de la norme,
puisqu'elle fait référence à la norme C que je ne possède pas,
mais c'est ce que me confirme la doc dinkumware)
Maintenant, si on veut faire des nouveaux flux avec un nocreate, que
faire :
- nocreate : On ne crée pas s'il n'existe pas
- rien : On est comme spécifié dans la norme : On ne crée pas s'il
n'existe pas
Donc l'existance d'un nocreate ne me semble pas très intéressante,
puisque le comportement des anciens flux (créer si le fichier n'existe
pas) ne sera de toute manière pas retrouvé.
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
Sauf que s'il les a mis, c'est qu'il en a besoin de la sémantique.
Et il l'a sans rien faire. Ce serait en fait d'une semantique
create_if_not_found dont il aurait besoin.
kanze@gabi-soft.fr wrote:
En es tu sûr ? J'avoue que les compilateurs C++ dont je me sers me
présentent beaucoup d'extensions portables, dont je me sers
allégrément. Est-ce que tu es sûr que le compilateur C++ doit
interdire des threads, des link dynamiques et l'utilisation d'un GUI
? Ce ne sont, après tout, que des extensions.
J'avoue avoir moins de problème avec des extentions se présentant sous
forme de nouvelles fonctions/classes qu'avec des extensions se
présentant comme nouvelle valeur possible d'un paramètre de fonction.
J'ai un peu plus l'impression que le second cas peut arriver dans un
programme par étourderie et non par choix plus facilement que le
premier.
Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement
de comportement.
Comment ?
C'est ce que j'essaye d'expliquer dessus, mais j'ai du mal me faire
comprendre, je réessaye :
Anciens flux :
- Rien : On crée s'il n'existe pas
- nocreate : On ne crée pas s'il n'existe pas
Nouveaux flux sans nocreate :
- On ne crée pas s'il n'existe pas
(Je n'ai pas retrouvé de ref dans mon exemplaire de la norme,
puisqu'elle fait référence à la norme C que je ne possède pas,
mais c'est ce que me confirme la doc dinkumware)
Maintenant, si on veut faire des nouveaux flux avec un nocreate, que
faire :
- nocreate : On ne crée pas s'il n'existe pas
- rien : On est comme spécifié dans la norme : On ne crée pas s'il
n'existe pas
Donc l'existance d'un nocreate ne me semble pas très intéressante,
puisque le comportement des anciens flux (créer si le fichier n'existe
pas) ne sera de toute manière pas retrouvé.
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
Sauf que s'il les a mis, c'est qu'il en a besoin de la sémantique.
Et il l'a sans rien faire. Ce serait en fait d'une semantique
create_if_not_found dont il aurait besoin.
wrote:En es tu sûr ? J'avoue que les compilateurs C++ dont je me sers me
présentent beaucoup d'extensions portables, dont je me sers
allégrément. Est-ce que tu es sûr que le compilateur C++ doit
interdire des threads, des link dynamiques et l'utilisation d'un GUI
? Ce ne sont, après tout, que des extensions.
J'avoue avoir moins de problème avec des extentions se présentant sous
forme de nouvelles fonctions/classes qu'avec des extensions se
présentant comme nouvelle valeur possible d'un paramètre de fonction.
J'ai un peu plus l'impression que le second cas peut arriver dans un
programme par étourderie et non par choix plus facilement que le
premier.Par exemple si à un moment l'utilisateur ouvrait un fichier sans le
nocreate, il en créait un. Si maintenant il porte son programme vers
les nouveaux flux sans le relire (ce qu'incite l'ajout d'un nocreate
dans les nouveaux flux), son programme aura changé silentieusement
de comportement.
Comment ?
C'est ce que j'essaye d'expliquer dessus, mais j'ai du mal me faire
comprendre, je réessaye :
Anciens flux :
- Rien : On crée s'il n'existe pas
- nocreate : On ne crée pas s'il n'existe pas
Nouveaux flux sans nocreate :
- On ne crée pas s'il n'existe pas
(Je n'ai pas retrouvé de ref dans mon exemplaire de la norme,
puisqu'elle fait référence à la norme C que je ne possède pas,
mais c'est ce que me confirme la doc dinkumware)
Maintenant, si on veut faire des nouveaux flux avec un nocreate, que
faire :
- nocreate : On ne crée pas s'il n'existe pas
- rien : On est comme spécifié dans la norme : On ne crée pas s'il
n'existe pas
Donc l'existance d'un nocreate ne me semble pas très intéressante,
puisque le comportement des anciens flux (créer si le fichier n'existe
pas) ne sera de toute manière pas retrouvé.
Si maintenant il entreprend la tâche de relire son code, enlever
quelques nocreate inutiles n'est pas la mort.
Sauf que s'il les a mis, c'est qu'il en a besoin de la sémantique.
Et il l'a sans rien faire. Ce serait en fait d'une semantique
create_if_not_found dont il aurait besoin.
w truncate to zero length or create text file for writing
w+ truncate to zero length or create file for update
w truncate to zero length or create text file for writing
w+ truncate to zero length or create file for update
w truncate to zero length or create text file for writing
w+ truncate to zero length or create file for update