OVH Cloud OVH Cloud

lire le contenu d'un répertoire en C++

56 réponses
Avatar
oxidor trucidel
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.

--
Oxidor Trucidel

10 réponses

1 2 3 4 5
Avatar
Christophe de VIENNE
Loïc Joly wrote:
oxidor trucidel wrote:

je cherche un moyen de faire lire par mon programme le contenu
d'un répertoire (comme la très classique commande dir).




[...]


Le but final de l'opération est, tout simplement, de sauvegarder des
données
et
de lire le répertoire pour vérifier si des données s'y trouvent déjà.




[...]

Par contre, comme l'OS peut cacher des informations en faisant croire
que le fichier est sur disque, ni ta méthode ni la mienne n'offrent une
sécurité absolue.


Heu, je ne crois pas que cela dérange l'OP. L'info qu'il cherche n'est
pas : "mes données sont-elle physiquement sur le disque ?", mais "Y
a-t-il un ficher de sauvegarde que je peux lire dans tel dossier".

--
Christophe de Vienne




Avatar
drkm
Loïc Joly writes:

Déjà, si on vérifie le type de retour
de close, on doit être pas mal.


Il me semble même que l'on ne doit rien pouvoir faire de plus, en
C++ standard.

Peut-être peut-on utiliser une fonction

bool closeAndWait( std::ofstream & file ) ;

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.

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

Avatar
drkm
Christophe de VIENNE writes:

Loïc Joly wrote:

oxidor trucidel wrote:

je cherche un moyen de faire lire par mon programme le contenu
d'un répertoire (comme la très classique commande dir).




[...]

Le but final de l'opération est, tout simplement, de sauvegarder
des données
et
de lire le répertoire pour vérifier si des données s'y trouvent déjà.



[...]

Par contre, comme l'OS peut cacher des informations en faisant
croire que le fichier est sur disque, ni ta méthode ni la mienne
n'offrent une sécurité absolue.


Heu, je ne crois pas que cela dérange l'OP. L'info qu'il cherche n'est
pas : "mes données sont-elle physiquement sur le disque ?", mais "Y
a-t-il un ficher de sauvegarde que je peux lire dans tel dossier".


Tiens, bizarre. J'avais également compris comme Loïc. Sans doute
faudrait-il une clarification du PO.

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





Avatar
oxidor trucidel
"Christophe de VIENNE" a écrit dans le message de
news:newscache$va8e2i$db8$
Loïc Joly wrote:
oxidor trucidel wrote:

je cherche un moyen de faire lire par mon programme le contenu
d'un répertoire (comme la très classique commande dir).




[...]


Le but final de l'opération est, tout simplement, de sauvegarder des
données
et
de lire le répertoire pour vérifier si des données s'y trouvent déjà.




[...]

Par contre, comme l'OS peut cacher des informations en faisant croire
que le fichier est sur disque, ni ta méthode ni la mienne n'offrent une
sécurité absolue.


Heu, je ne crois pas que cela dérange l'OP. L'info qu'il cherche n'est
pas : "mes données sont-elle physiquement sur le disque ?", mais "Y
a-t-il un ficher de sauvegarde que je peux lire dans tel dossier".


Oui, c'est très exactement ça.

Désolé si je me suis mal fait comprendre;

--
Oxidor Trucidel





Avatar
Loïc Joly
drkm wrote:

Loïc Joly writes:


ofstream os("PersoDD3.5.txt");
os << "Level 25" << endl;
if (!os.close())
{
cout << "Erreur de sauvegarde" << endl;
}



Il me semblait que std::basic_ofstream<>::close() ne retournait pas
de valeur.


Tiens, oui, je viens de le découvrir. Il fallait donc écrire :
os.close();
if(!os)
{
cout << "Erreur de sauvegarde" << endl;
}


Ne doit-on pas plutôt utiliser :

if ( ! os.rdbuf()->close() ) {
// erreur
}



Ca me semble plus lourd comme écriture. Et ce n'est pas équivalent (tout
ce que je dis ici est sujet à caution, je ne suis pas un pro de cette
partie du C++, comme ma petite bourde précédente le prouve) :

- 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.
- Ca ne met pas à true le failbit d'os, ce qui peut (?) poser des problèmes.

--
Loïc


Avatar
drkm
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é.

- 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.

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

Avatar
M. B.
"oxidor trucidel" a écrit dans le message de news:
411ccae0$0$307$
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.



using System;
using System.IO;
using System.Collections;

public class RecursiveFileProcessor
{
public static void Main(string[] args)
{
foreach(string path in args)
{
if(File.Exists(path))
ProcessFile(path);
else if(Directory.Exists(path))
ProcessDirectory(path);
else
Console.WriteLine("{0} is not a valid file or directory",
path);
}
}

public static void ProcessDirectory(string targetDirectory)
{
string [] fileEntries = Directory.GetFiles(targetDirectory);
foreach(string fileName in fileEntries)
ProcessFile(fileName);

string [] subdirectoryEntries Directory.GetDirectories(targetDirectory);
foreach(string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory);
}

public static void ProcessFile(string path)
{
Console.WriteLine("Processed file '{0}'", path);
}
}

Oh merde, c'est du CSharp ...

Desole.

MB

Avatar
Loïc Joly
M. B. wrote:

"oxidor trucidel" a écrit dans le message de news:
411ccae0$0$307$

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.

[...]



Oh merde, c'est du CSharp ...

Desole.


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.

--
Loïc


Avatar
Fabien LE LEZ
On Sat, 14 Aug 2004 09:44:12 +0200, Loïc Joly
:

tu aurais pu faire un post intéressant.


Ce n'est pas le but d'un trolleur, si je ne m'abuse.

Avatar
M. B.
"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

MB

1 2 3 4 5