Salut,
Je débute en c++, uniquement avec les ressources du net, et
je cherche un moyen de faire lire par mon programme le contenu
d'un répertoire (comme la très classique commande dir).
J'ai cherché sans succès avec google et suis encore occuper
à fouiller les archives de cppfrance.com.
(copie presque carbonne d'une réponse faite sur fr.comp.lang.c)
Salut,
Je débute en c++, uniquement avec les ressources du net, et
je cherche un moyen de faire lire par mon programme le contenu
d'un répertoire (comme la très classique commande dir).
J'ai cherché sans succès avec google et suis encore occuper
à fouiller les archives de cppfrance.com.
(copie presque carbonne d'une réponse faite sur fr.comp.lang.c)
Salut,
Je débute en c++, uniquement avec les ressources du net, et
je cherche un moyen de faire lire par mon programme le contenu
d'un répertoire (comme la très classique commande dir).
J'ai cherché sans succès avec google et suis encore occuper
à fouiller les archives de cppfrance.com.
(copie presque carbonne d'une réponse faite sur fr.comp.lang.c)
drkm writes:
|> Loïc Joly writes:
|> > - Ca n'indique que si la fermeture s'est bien passée, pas s'il y a eu
|> > des problèmes précédent la fermeture.
|> Ce qui était bien le but recherché.
S'il y a eu des problèmes précédemment, qu'est-ce qui aurait rémis le
failbit ou le badbit à 0 ?
|> > - Ca ne met pas à true le failbit d'os, ce qui peut (?) poser des
|> > problèmes.
|> En effet. 27.8.1.7/4 :
|> void close();
|> Effects : Calls rdbuf()->close() and, if that function returns
|> false, calls setstate(failbit)
|> std::basic_filebuf<>::close() ne retourne d'ailleurs pas un booléen,
|> mais un filebuf. Je pense donc que tu as raison, sur la manière de
|> tester la fermeture du fichier.
Sauf que comme Loïc l'a déjà dit, tout ce que ça dit, c'est qu'on a
réussi à passer les données au système. Rien ne garantit qu'elles soient
sur disque.
En fait, dans le cadre du C++ portable, il n'y a aucune
façon à le garantir.
drkm <usenet.fclcxx@fgeorges.org> writes:
|> Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
|> > - Ca n'indique que si la fermeture s'est bien passée, pas s'il y a eu
|> > des problèmes précédent la fermeture.
|> Ce qui était bien le but recherché.
S'il y a eu des problèmes précédemment, qu'est-ce qui aurait rémis le
failbit ou le badbit à 0 ?
|> > - Ca ne met pas à true le failbit d'os, ce qui peut (?) poser des
|> > problèmes.
|> En effet. 27.8.1.7/4 :
|> void close();
|> Effects : Calls rdbuf()->close() and, if that function returns
|> false, calls setstate(failbit)
|> std::basic_filebuf<>::close() ne retourne d'ailleurs pas un booléen,
|> mais un filebuf. Je pense donc que tu as raison, sur la manière de
|> tester la fermeture du fichier.
Sauf que comme Loïc l'a déjà dit, tout ce que ça dit, c'est qu'on a
réussi à passer les données au système. Rien ne garantit qu'elles soient
sur disque.
En fait, dans le cadre du C++ portable, il n'y a aucune
façon à le garantir.
drkm writes:
|> Loïc Joly writes:
|> > - Ca n'indique que si la fermeture s'est bien passée, pas s'il y a eu
|> > des problèmes précédent la fermeture.
|> Ce qui était bien le but recherché.
S'il y a eu des problèmes précédemment, qu'est-ce qui aurait rémis le
failbit ou le badbit à 0 ?
|> > - Ca ne met pas à true le failbit d'os, ce qui peut (?) poser des
|> > problèmes.
|> En effet. 27.8.1.7/4 :
|> void close();
|> Effects : Calls rdbuf()->close() and, if that function returns
|> false, calls setstate(failbit)
|> std::basic_filebuf<>::close() ne retourne d'ailleurs pas un booléen,
|> mais un filebuf. Je pense donc que tu as raison, sur la manière de
|> tester la fermeture du fichier.
Sauf que comme Loïc l'a déjà dit, tout ce que ça dit, c'est qu'on a
réussi à passer les données au système. Rien ne garantit qu'elles soient
sur disque.
En fait, dans le cadre du C++ portable, il n'y a aucune
façon à le garantir.
drkm writes:
|> qui ferme le fichier et utilise l'API de l'OS pour faire un flush du
|> fichier sur le disque, un équivalent de sync(1) pour Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande revient
à l'utilisateur dès que les écritures (physiques, au moins) ont été
schédulée
drkm <usenet.fclcxx@fgeorges.org> writes:
|> qui ferme le fichier et utilise l'API de l'OS pour faire un flush du
|> fichier sur le disque, un équivalent de sync(1) pour Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande revient
à l'utilisateur dès que les écritures (physiques, au moins) ont été
schédulée
drkm writes:
|> qui ferme le fichier et utilise l'API de l'OS pour faire un flush du
|> fichier sur le disque, un équivalent de sync(1) pour Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande revient
à l'utilisateur dès que les écritures (physiques, au moins) ont été
schédulée
James Kanze writes:drkm writes:qui ferme le fichier et utilise l'API de l'OS pour faire un flush
du fichier sur le disque, un équivalent de sync(1) pour Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande
revient à l'utilisateur dès que les écritures (physiques, au moins)
ont été schédulée
Tu veux dire qu'elle prépare les requêtes d'écriture sur le disque
(ou même seulement qu'elle dit qu'il faut les envoyer au plus vite),
mais qu'elle n'attend pas leur accomplissement ?
J'ai toujours cru qu'elle ne revenait que lorsque les données
étaient effectivement sur le disque.
James Kanze <kanze@gabi-soft.fr> writes:
drkm <usenet.fclcxx@fgeorges.org> writes:
qui ferme le fichier et utilise l'API de l'OS pour faire un flush
du fichier sur le disque, un équivalent de sync(1) pour Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande
revient à l'utilisateur dès que les écritures (physiques, au moins)
ont été schédulée
Tu veux dire qu'elle prépare les requêtes d'écriture sur le disque
(ou même seulement qu'elle dit qu'il faut les envoyer au plus vite),
mais qu'elle n'attend pas leur accomplissement ?
J'ai toujours cru qu'elle ne revenait que lorsque les données
étaient effectivement sur le disque.
James Kanze writes:drkm writes:qui ferme le fichier et utilise l'API de l'OS pour faire un flush
du fichier sur le disque, un équivalent de sync(1) pour Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande
revient à l'utilisateur dès que les écritures (physiques, au moins)
ont été schédulée
Tu veux dire qu'elle prépare les requêtes d'écriture sur le disque
(ou même seulement qu'elle dit qu'il faut les envoyer au plus vite),
mais qu'elle n'attend pas leur accomplissement ?
J'ai toujours cru qu'elle ne revenait que lorsque les données
étaient effectivement sur le disque.
James Kanze writes:drkm writes:
|> qui ferme le fichier et utilise l'API de l'OS pour faire un
|> flush du fichier sur le disque, un équivalent de sync(1) pour
|> Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande
revient à l'utilisateur dès que les écritures (physiques, au moins)
ont été schédulée
Tu veux dire qu'elle prépare les requêtes d'écriture sur le disque
(ou même seulement qu'elle dit qu'il faut les envoyer au plus vite),
mais qu'elle n'attend pas leur accomplissement ?
J'ai toujours cru qu'elle ne revenait que lorsque les données
étaient effectivement sur le disque.
Je ne suis pas sur Unix pour l'instant, mais j'ai trouvé cet extrait
sur le web, un extrait de la page sync(2) d'une version de Linux :
According to the standard specification (e.g., SVID), sync()
schedules the writes, but may return before the actual writing is
done. However, since version 1.3.20 Linux does actually wait.
(This still does not guarantee data integrity: modern disks have
large caches.)
James Kanze <kanze@gabi-soft.fr> writes:
drkm <usenet.fclcxx@fgeorges.org> writes:
|> qui ferme le fichier et utilise l'API de l'OS pour faire un
|> flush du fichier sur le disque, un équivalent de sync(1) pour
|> Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande
revient à l'utilisateur dès que les écritures (physiques, au moins)
ont été schédulée
Tu veux dire qu'elle prépare les requêtes d'écriture sur le disque
(ou même seulement qu'elle dit qu'il faut les envoyer au plus vite),
mais qu'elle n'attend pas leur accomplissement ?
J'ai toujours cru qu'elle ne revenait que lorsque les données
étaient effectivement sur le disque.
Je ne suis pas sur Unix pour l'instant, mais j'ai trouvé cet extrait
sur le web, un extrait de la page sync(2) d'une version de Linux :
According to the standard specification (e.g., SVID), sync()
schedules the writes, but may return before the actual writing is
done. However, since version 1.3.20 Linux does actually wait.
(This still does not guarantee data integrity: modern disks have
large caches.)
James Kanze writes:drkm writes:
|> qui ferme le fichier et utilise l'API de l'OS pour faire un
|> flush du fichier sur le disque, un équivalent de sync(1) pour
|> Unix.
Je ne crois pas que tu veux dire sync(1), puisque cette commande
revient à l'utilisateur dès que les écritures (physiques, au moins)
ont été schédulée
Tu veux dire qu'elle prépare les requêtes d'écriture sur le disque
(ou même seulement qu'elle dit qu'il faut les envoyer au plus vite),
mais qu'elle n'attend pas leur accomplissement ?
J'ai toujours cru qu'elle ne revenait que lorsque les données
étaient effectivement sur le disque.
Je ne suis pas sur Unix pour l'instant, mais j'ai trouvé cet extrait
sur le web, un extrait de la page sync(2) d'une version de Linux :
According to the standard specification (e.g., SVID), sync()
schedules the writes, but may return before the actual writing is
done. However, since version 1.3.20 Linux does actually wait.
(This still does not guarantee data integrity: modern disks have
large caches.)
"Loïc Joly" a écrit dans le message de
news: cfkfl9$oor$M. B. wrote:
Ce qui est con, c'est que si tu avais précédé ton post en informant
que c'était pas du C++ standard, car une solution standard n'existe
pas, et que donc tu donne une solution VC++.NET only, et si cette
solution, tu l'avais donnée en C++.NET (ce qui est trivial à partir
de l'écriture C#), tu aurais pu faire un post intéressant.
Il n'y a aucun interet a utiliser C++ sur .NET
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message de
news: cfkfl9$oor$1@news-reader3.wanadoo.fr...
M. B. wrote:
Ce qui est con, c'est que si tu avais précédé ton post en informant
que c'était pas du C++ standard, car une solution standard n'existe
pas, et que donc tu donne une solution VC++.NET only, et si cette
solution, tu l'avais donnée en C++.NET (ce qui est trivial à partir
de l'écriture C#), tu aurais pu faire un post intéressant.
Il n'y a aucun interet a utiliser C++ sur .NET
"Loïc Joly" a écrit dans le message de
news: cfkfl9$oor$M. B. wrote:
Ce qui est con, c'est que si tu avais précédé ton post en informant
que c'était pas du C++ standard, car une solution standard n'existe
pas, et que donc tu donne une solution VC++.NET only, et si cette
solution, tu l'avais donnée en C++.NET (ce qui est trivial à partir
de l'écriture C#), tu aurais pu faire un post intéressant.
Il n'y a aucun interet a utiliser C++ sur .NET