2010-03-09 2 views
1

Je viens d'un arrière-plan C# et je travaille sur un projet C++. J'ai besoin d'ouvrir les fichiers dans un répertoire, puis traiter ces données dans les fichiers. Le problème est sur mon environnement cible (Greenhills Integrity), je ne peux pas accéder à un "répertoire". Il semble que C++ n'a pas de concept de répertoire. Pourquoi pas? Ce problème est simple en C#. Je ne peux pas créer de lien vers une grande bibliothèque (BOOST ou dirent) pour obtenir les fichiers. Je peux ouvrir un fichier en utilisant fopen, mais je ne connaîtrai pas toujours les noms des fichiers, donc je dois "strcat" le répertoire à chaque nom de fichier afin de "fopen" les fichiers.Détermination de fichiers dans un répertoire

J'ai besoin d'un moyen de simplement obtenir les noms de fichiers dans un répertoire sans utiliser une API externe. Est-ce possible?

+0

En C++, il n'y a pas de notion de répertoire. Le système sous-jacent traite les fichiers et les répertoires de la même manière que les «handles». IIRC il y a un drapeau sur un descripteur de système de fichiers qui indique s'il s'agit d'un répertoire (regardez la fonction stat.) –

+0

Ajout de la balise 'posix' puisque Greenhills Integrity supporte POSIX. –

Répondre

3

Non, ce n'est pas possible. C++ n'a pas de fonctionnalité de répertoire "intégré" - vous devez utiliser une bibliothèque de quelque sorte.

+0

Bien sûr que c'est possible. Alors que C++ n'a pas de classes de répertoire spécifiques (comme les flux de fichiers), vous pouvez simplement appeler les appels système sous-jacents - readdir et al. http://www.cs.cf.ac.uk/Dave/C/node20.html –

+3

readdir n'est pas un appel système. Toutes les E/S en C++ (comme en C) sont pré-formatées via des bibliothèques. –

4

Les principales API C++ ont des répertoires. Commencez par readdir sur POSIX ou FindFirstFile() sur Windows. Greenhills semble support POSIX.

+0

Pourquoi la downvote? –

+0

Peut-être que quelqu'un pensait que des conseils pour accomplir quelque chose sur Win32 et Unix ne sont pas très utiles pour quelqu'un qui pirate Greenhills Integrity? Rappelez-vous, alors que ce n'était pas moi, je ne les blâmerais pas. – sbi

+1

J'ai d'abord décliné parce que readdir n'est pas une fonction C++ générique; cependant ont re-upvoted depuis la modification pour indiquer que la fonction requise est spécifique à l'exploitation. –

2

Vérifiez auprès de votre système d'exploitation. La gestion d'annuaire est différente pour chacun. Vous devrez utiliser l'API Windows 32 si vous souhaitez répertorier/interroger des répertoires sur Microsoft Windows et l'API Linux (par exemple opendir/stat) si vous souhaitez répertorier/interroger des répertoires sous Linux.

+1

Voir http://stackoverflow.com/questions/883594/microsoft-visual-studio-opendir-and-readdir-how –

Questions connexes