Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ofstream et vérification de l'existence d'un fichier

18 réponses
Avatar
oxidor trucidel
J'ai essayé le truc de Loic avec ofstream sans fichier de sauvegarde,
j'obtient plusieurs erreurs à la ligne if (!os(close))

Du coup, je prends mon petit lexique c++ au chapitre ofstream et
je lis "comportement par défaut: s'il ne trouve pas le fichier que vous
voulez ouvrir, il en crée un".

Si le fichier est créé par l'instruction, est-ce utile de vérifier son
existence ?

Bon, je me remets au boulot... mais je crois bien que je ne tarderai pas
à revenir avec une autre question.

--
Oxidor Trucidel

10 réponses

1 2
Avatar
Alain Naigeon
"drkm" a écrit dans le message news:


"oxidor trucidel" writes:
Du coup, je prends mon petit lexique c++ au chapitre ofstream et
je lis "comportement par défaut: s'il ne trouve pas le fichier que vous
voulez ouvrir, il en crée un".

Si le fichier est créé par l'instruction, est-ce utile de vérifier son
existence ?


Donc Vincent avait raison. Je ne pense pas qu'il y ai moyen, en C++
standard, de savoir si un fichier existe avant sa création.


"comportement par défaut", ça ne suggère pas qu'on peut le changer ?

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France


Avatar
drkm
"oxidor trucidel" writes:

J'ai essayé le truc de Loic avec ofstream sans fichier de sauvegarde,
j'obtient plusieurs erreurs à la ligne if (!os(close))


Loïc a vraiment écrit cela ?

Essaie plutôt, comme Loïc l'a fait remarquer :

if ( ! os ) {
// erreur, peut-être
}
else {
os.close()
if ( ! os ) {
// erreur à la fermeture
}
}

Du coup, je prends mon petit lexique c++ au chapitre ofstream et
je lis "comportement par défaut: s'il ne trouve pas le fichier que vous
voulez ouvrir, il en crée un".

Si le fichier est créé par l'instruction, est-ce utile de vérifier son
existence ?


Donc Vincent avait raison. Je ne pense pas qu'il y ai moyen, en C++
standard, de savoir si un fichier existe avant sa création. Il me
semble même avoir vu un paragraphe sur ce problème dans la doc de
Boost.FileSystem, qui semblait n'avoir pas trouvé de solution au
problème soulvant des problèmes de locks.

Bon, je me remets au boulot... mais je crois bien que je ne tarderai pas
à revenir avec une autre question.


--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Avatar
Fabien LE LEZ
On Sat, 14 Aug 2004 00:13:25 +0200, "oxidor trucidel" :

s'il ne trouve pas le fichier que vous
voulez ouvrir, il en crée un".


S'il le peut. Imagine que tu essaies de créer un fichier sur un
système en lecture seule, ou un fichier de même nom qu'un répertoire
existant.


--
;-)

Avatar
Loïc Joly
oxidor trucidel wrote:

J'ai essayé le truc de Loic avec ofstream sans fichier de sauvegarde,
j'obtient plusieurs erreurs à la ligne if (!os(close))


Voir mes autres messages où j'ai corrigé mon erreur.


Du coup, je prends mon petit lexique c++ au chapitre ofstream et
je lis "comportement par défaut: s'il ne trouve pas le fichier que vous
voulez ouvrir, il en crée un".

Si le fichier est créé par l'instruction, est-ce utile de vérifier son
existence ?


Je ne suis pas certain (et de moins en moins) de ce que tu veux vraiment
faire.

Si tu veux vérifier qu'un fichier existe, pour ne pas l'écraser :

ifstream is("toto.txt");
if(is)
{
// Le fichier existe déjà
}
is.close();

Si tu veux vérifier que tu as bien ouvert un fichier en écriture (si le
fichier n'existe pas, il est crée automatiquement, mais s'il existe et
que tu n'as pas les droits dessus...) :
ofstream os("toto.txt");
if(!os)
{
// Erreur à l'ouverture
}

Si tu veux vérifier qu'après avoir écrit plein de choses dedans, il
s'est bien sauvegardé :
ofstream os("toto.txt");
// On écrit dedans
os.close();
if(!os)
{
// Erreur à la fermeture, ou avant
}

--
Loïc

Avatar
drkm
"Alain Naigeon" writes:

"drkm" a écrit dans le message news:


"oxidor trucidel" writes:

Du coup, je prends mon petit lexique c++ au chapitre ofstream et
je lis "comportement par défaut: s'il ne trouve pas le fichier que vous
voulez ouvrir, il en crée un".

Si le fichier est créé par l'instruction, est-ce utile de vérifier son
existence ?


Donc Vincent avait raison. Je ne pense pas qu'il y ai moyen, en C++
standard, de savoir si un fichier existe avant sa création.


"comportement par défaut", ça ne suggère pas qu'on peut le changer ?


Et alors ?

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html



Avatar
oxidor trucidel
"drkm" a écrit:

"oxidor trucidel" writes:

J'ai essayé le truc de Loic avec ofstream sans fichier de sauvegarde,
j'obtient plusieurs erreurs à la ligne if (!os(close))


Loïc a vraiment écrit cela ?


Heu... c'est sa première réponse, j'ai sauté dessus pour faire un essai
sans attendre la suite.

Essaie plutôt, comme Loïc l'a fait remarquer :

if ( ! os ) {
// erreur, peut-être
}
else {
os.close()
if ( ! os ) {
// erreur à la fermeture
}
}

Du coup, je prends mon petit lexique c++ au chapitre ofstream et
je lis "comportement par défaut: s'il ne trouve pas le fichier que vous
voulez ouvrir, il en crée un".

Si le fichier est créé par l'instruction, est-ce utile de vérifier son
existence ?


Donc Vincent avait raison. Je ne pense pas qu'il y ai moyen, en C++
standard, de savoir si un fichier existe avant sa création. Il me
semble même avoir vu un paragraphe sur ce problème dans la doc de
Boost.FileSystem, qui semblait n'avoir pas trouvé de solution au
problème soulvant des problèmes de locks.


Ah, j'ai la nostalgie de QBasic, tout à coup. ;-)

--
Oxidor Trucidel


Avatar
oxidor trucidel
"Loïc Joly" a écrit:

oxidor trucidel wrote:

J'ai essayé le truc de Loic avec ofstream sans fichier de sauvegarde,
j'obtient plusieurs erreurs à la ligne if (!os(close))


Voir mes autres messages où j'ai corrigé mon erreur.


Vu (mais un peu tard)

Du coup, je prends mon petit lexique c++ au chapitre ofstream et
je lis "comportement par défaut: s'il ne trouve pas le fichier que vous
voulez ouvrir, il en crée un".

Si le fichier est créé par l'instruction, est-ce utile de vérifier son
existence ?


Je ne suis pas certain (et de moins en moins) de ce que tu veux
vraiment faire.


Je suis déçu, je croyais que tu avais un don de double vue...

Gérer des personnages d&d et sauvegarder chacun d'eux dans
un fichier indépendant.

Ma première idée était de lire le directory pour vérifier si des
personnages (disons que je prends l'extention .pj) sont déjà
sauvegardés, vu que ça s'avère plutôt compliqué, j'ai eu l'idée
de faire un fichier "perso.txt" qui contient uniquement la liste
des fichiers .pj

Si tu veux vérifier qu'un fichier existe, pour ne pas l'écraser :


[snip, pleins de trucs utiles]

Je vais essayer tout ça, de toute façon, si ça ne sert pas tout
de suite, ça servira un peu plus tard.

--
Oxidor Trucidel


Avatar
Fabien LE LEZ
On Sat, 14 Aug 2004 13:38:44 +0200, "oxidor trucidel" :

Ah, j'ai la nostalgie de QBasic, tout à coup. ;-)


QBasic permettait de détecter si un fichier existe ?

Remarque, si tu veux faire du spécifique-Windows, utilise les
fonctions de l'API Win32 qui vont bien, la gestion d'erreur n'en sera
que plus fine.

--
;-)

Avatar
drkm
"oxidor trucidel" writes:

"drkm" a écrit:

"oxidor trucidel" writes:

J'ai essayé le truc de Loic avec ofstream sans fichier de sauvegarde,
j'obtient plusieurs erreurs à la ligne if (!os(close))


Loïc a vraiment écrit cela ?


Heu... c'est sa première réponse, j'ai sauté dessus pour faire un essai
sans attendre la suite.



if ( ! os.close() )

Et comme tu le sous-entend, il s'est repris par la suite.

Au fait, pourquoi std::basic_fstream<>::close() ne retourne-t-elle
pas ce que lui retourne std::basic_filebuf<>::close() ? Voire une
référence vers le flux, convertible en booléen. De manière à pouvoir
écrire le test ci-dessus. Y a-t-il une motivation derrière cette
décision ?

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html



Avatar
drkm
"oxidor trucidel" writes:

j'ai eu l'idée
de faire un fichier "perso.txt" qui contient uniquement la liste
des fichiers .pj


AMHA, c'est une bonne solution. Le fichier gagnerait cependant à
être renommé. Et un petit script Shell ou Perl pourrait être
intéressant pour vérifier la cohérence de ces listes de fichiers avec
l'état effectif du FS, ou reconstruire facilement ces listes de
fichiers.

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

1 2