Erreur de syntaxe ????

molo2003
Erreur de syntaxe ????

Bonjour les experts,

J'ai déjà ,il y a quelques années programmer léger en Visual C++ Version 6 (avec MFC). Je viens d'acheter Microsoft Visual Studio 2005 Standard et je me suis remis à la programmation basique en C++ .
Voici mon problème:

Dans mon programme, j'ai établi un « Array de FileSystemInfo » par la Classe DirectoryInfo au moyen du membre GetFileSystemInfos.Je récupère ainsi la liste des fichiers et sous répertoire de mon repertoire origine(String^ origine). Cele marche très bien puisque je peux lire la liste exacte du chemin complet de ceux ci par le premier « Console::WriteLine(« Repertoire ..... ».
Mais mon problème provient a la suite: pour chaque élement du « Array  ^FileSystemInfo^ », je veux tester si c'est un répertoire ou un fichier. Je veux utiliser la propriété « Attributes.Get() » pour tester , dans le « FileAttributes » donné,si le membre « Directory » est présent ou absent . Je saurais affirmer si l'élément est un répertoire ou pas.

Et c'est dans cette ligne du if((File::GetAttributes( .... que ce produit l'erreur ci dessous:
« Erreur 1 error C3063: opérateur '&' : tous les opérandes doivent avoir le même type énumération »

Je veux absolument utiliser la Classe FileSystemInfo et ses membres. Dans la documentation, on parle de pouvoir « caster » les éléments de FileSystemInfo en elements de File.... mais je ne sais pas faire.
Je vous soumets une petite parti du code source

Code source:

DirectoryInfo^ dirinfo = gcnew DirectoryInfo(origine); // origine

array^ reper = dirinfo -> GetFileSystemInfos ();

for(int i=0; i < reper->Length; i++) //liste des fich et sous-dir du rep_ori
{ String^ fich_ou_dir = gcnew String((reper[i]->FullName)->ToString());
Console::WriteLine("Repertoire_{0}: {1}", i, fich_ou_dir);

if ((File::GetAttributes( fich_ou_dir )) & FileAttributes::Directory == FileAttributes::Directory )
{ Console::WriteLine("\n\n OUIIIIIIIII c'est un directory");
}

}

Voilà, si quelqu'un connait la syntaxe exacte pour obtenir mon résultat, je suis prenneur.

Autre petite question banale: quelle syntaxe pour convertir un int en String^ ???

Grand merci d'avance à ceux qui voudront m'aider.

K-lo

:(
Heu waouh pour ce type de programme (lecture de répertoire)
personnellement j'aurais plutôt utiliser la bibliothèque boost
si c'est bien du c++ que tu fais et pas du .NET

#include <iostream>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
using namespace boost::filesystem;

int main(int argc, char *argv){

path cheminAbsolu = system_complete(path(tonChemin,native)); 
directory_iterator finDir;
for(directory_iterator itDir(cheminAbsolu); itDir != finDir; ++itDir)
{
std::cout<< itDir->leaf(); //affiche le contenu du répertoire
}

Pour vérifier si c'est tu es présence d'un répertoire :

if(is_directory(*itDir))
{ 
cout<<"répertoire"; 
}

Et y a bien d'autres méthodes te fournissant des informations sur les fichiers et répertoires...
Site de la bibliothèque boost :
http://www.boost.org/ et documentation sur la boost - filesystem.
Et si t'as besoin de faire du graphisme tu as aussi qt avec les classe QFile et QDir.
Site officiel de Qt
Documentation Qt

Bon je sais que remettre en cause tout ton programme n'est pas évident mais personnellement je peux pas te conseiller autre chose :oops: car je ne connais pas la partie FileSystemInfo des MFC

molo2003
Erreur de syntaxe

Grand merci K-lo de ta réponse.
Elle est trés pertinente je n'en doute pas. Mais je veux découvrir et me former encore sur les MFC avant de faire la pas vers d'autres librairies. C'est vrai que j'ai un petit acquis sur les MFC que je dois approfondir.
Aussi, j'aimerai rester sur le même chemin avec l'accompagnement et les conseils ici des experts.

Encore grand merci à toi K-lo pour ta coopération.

J'attends l'avis d'un maître qui me fera progresser .

@++++++++++++++;

K-lo
Re: Erreur de syntaxe

molo2003 wrote:

Aussi, j'aimerai rester sur le même chemin avec l'accompagnement et les conseils ici des experts.
Encore grand merci à toi K-lo pour ta coopération.
J'attends l'avis d'un maître qui me fera progresser .

Alors en les attendant déjà prépare toi à ce que certains cris à propos des MFC (private joke) mais bon c'est pas le sujet...

Alors pour déjà "macher" le travail des experts il faudrais que tu affiche ton test, où y a un problème, au complet pour qu'il sache comment te répondre...

Quote:
Et c'est dans cette ligne du if((File::GetAttributes( .... que ce produit l'erreur ci dessous:
« Erreur 1 error C3063: opérateur '&' : tous les opérandes doivent avoir le même type énumération »

car si c'est une erreur d'inattention peut être que même une personne non experte pourrais te la trouver => question de recul sur le code...
fredericmazue

Quote:
J'ai déjà ,il y a quelques années programmer léger en Visual C++ Version 6 (avec MFC). Je viens d'acheter Microsoft Visual Studio 2005 Standard et je me suis remis à la programmation basique en C++ .

Houlà...
A lire le reste de ton post il n'y a rien de C++ basique dedans, ni même de MFC.
Ton code c'est du C++/CLI, c'est à dire le C++ à la sauce Microsoft et .Net, pas le "vrai" C++. Et dans ce que tu montres tu n'utilises pas du tout MFC mais les classes .Net. Bref on ne peut pas dire que tu fais du C++ là.

Quote:
if ((File::GetAttributes( fich_ou_dir )) & FileAttributes::Directory == FileAttributes::Directory )

Très simple. Une parenthèse n'est pas à sa place.
Le compilateur voit: (File::GetAttributes( fich_ou_dir )) et en déduis que c'est un booléen donc il n'y a pas concordance de types avec File::Attributes, d'où le message d'erreur.
A la place essaie:
if ((File::GetAttributes( fich_ou_dir ) & FileAttributes::Directory) == FileAttributes::Directory )
:)
Quote:
Dans la documentation, on parle de pouvoir « caster » les éléments de FileSystemInfo en elements de File.... mais je ne sais pas faire.

Tu peux essayer:
FileInfo^ myFileInfo = safe_cast<FileInfo^>(objet_a_caster);

Quote:
Autre petite question banale: quelle syntaxe pour convertir un int en String^ ???

Arghh.
Je pense que ta demande est mal formulée. Tu demandes de transformer un int en un pointeur managé. A supposer que ça soit possible je voudrais décourager de faire ça.
C'est pas en int en String que tu veux avoir ?

Quote:
Elle est trés pertinente je n'en doute pas. Mais je veux découvrir et me former encore sur les MFC avant de faire la pas vers d'autres librairies. C'est vrai que j'ai un petit acquis sur les MFC que je dois approfondir.
Aussi, j'aimerai rester sur le même chemin avec l'accompagnement et les conseils ici.

en ce qui concerne MFC et Qt, k-lo a raison.
Mais je tiens encore une fois à souligner que là tu ne fais pas du C++ avec MFC à l'ancienne comme tu sembles le croire. Tu fais du C++/CLI de .Net.
Bref en un mot comme en cent, tu ne fais pas du C++.
Bien sûr si C++/CLI te convient, que tu es conscient de ce que tu fais et que ton code n'est pas destiné à être compilé ailleurs que sous Windows alors pourquoi pas.
Mais si tu parles de faire du C++, d'approfondir du C++, alors tu dois vite faire un virage à 180°.
Je me suis permis d'insister sur ce point car au tout début de ton post tu as écrit
Quote:
Visual C++ Version 6 (avec MFC). et je me suis remis à la programmation basique en C++ .

mais ce que tu montres n'est pas du C++ et je pense que tu es berné à l'insu de ton plein gré par Microsoft.
Remarque qu'il est aussi possible de faire du vrai C++ avec Visual 2005 (ouf). L'outil n'est donc pas à jeter, mais le code est à ré-écrire.
molo2003

Grand merci à FredericMasue d'avoir pris de ton temps pour me répondre.

Tu as raison quand tu dis que ce ne sont pas les MFC de Visuam C++ version 6.1 que je retrouve dans Microsoft Visual Studio Standard. Ce sont les classes du .Net Framework mais du C++ tout de même.

Pourquoi dis tu que ce n'est pas du "vrai C++" ??? Précise ton idée .
Quelle est la référence du C++, a ton avis ????
Existe t-il une plateforme de développement C++ , avec un environnement universel ???? Celle que tu utilises , j'imagine !!!!

Chacun considère l'outil qu'il maitrise comme le meilleur, il en va du domaine du developpement comme dans d'autres choses.

je ne suis pas un programmeur professionnel mais amateur.... d'abord en C puis en C++ mais pour des usages personnel sans portée universelle. Voila pourquoi j'ai acquis la version actuelle de Studio 2005. Je ne prétends pas qu'elle soit la meilleure mais un outil comme un autre non ???... Je suis incapable de comparer avec un autre langage de programmation. Peut être vas tu m'éclairer??? En tous cas merci d'avance.
Professionnellement parlant, j'ai travailler dans l'administration de machine UNIX, et le shell est loin de m'être un domaine inconnu...

En tout cas, grand merci à toi d'avoir lu mon code .... En fait, j'ai trouvé la solution à tous mes problèmes en raisonnant logiquement ..... ne pas confondre pointer de "Array" et élément de "Array" (il fallait aussi mettre "fir_ou_dir[i]" ....

Quand aux conversionsde Int en String^ et vice versa..... j'ai trouvé les solutions dans la doc MSDN, dont la consultation n'est pas facile du tout ...
Pour info:
Int num=123; en String^ = msg ====> msg = num->ToString();
String^ txt="123"; en Int32 lig; ====> lig = Convert::ToInt32(txt);

Voila encore grand merci à toi fredericmazue.

Je reviendrai car j'ai beaucoup de choses à découvrir avec votre aide.
A++++++++++++++++++++;

fredericmazue

Quote:
Ce sont les classes du .Net Framework mais du C++ tout de même.

Non...
Quote:
Pourquoi dis tu que ce n'est pas du "vrai C++" ??? Précise ton idée .

Ce n'est pas "mon" idée, et je dis que ce n'est pas du vrai C++ parce que ça n'en est pas, tout simplement.
Le C++ avec les classes .Net que tu utilises s'appelle C++/CLI, c'est le C++ pour .Net que Microsoft a créé et ce n'est pas le C++ standard. C'est un *autre* langage avec certes de nombreuses similitudes et points communs avec C++.
Dès que tu utilises les classes .Net tu ne fait pas du C++. C'est comme ça. Tout le monde te le dira, sauf peut être Microsoft ;)

Quote:
Quelle est la référence du C++, a ton avis ????

Référence comment ça ?
Si tu parles au niveau langage, la référence du C++ est la norme qui le définit. Il s'agit d'un document Ansi/ISO. Ca coûte 30$ au format PDF et c'est la bible de tous les programmeurs C++ professionnels. Mais le documents est ardu, si tu es amateur comme tu le dis.
Si tu parles d'outils de développement peu importe à ce stade de la discussion.

Quote:
Existe t-il une plateforme de développement C++ , avec un environnement universel ???? Celle que tu utilises , j'imagine !!!!

Environnement universel, je ne sais pas ce que ça veut dire.
J'utilise plusieurs compilateur C++ sous Windows, Linux et autre plate-formes, mais peu importe.
Tu as Visual C++ Standard si j'ai bien compris.
Avec tu peux coder en C++/CLI comme tu le fais déjà.
Tu peux aussi faire du vrai C++. Il suffit de créer le projet dans ce sens.
Ou de modifier même un projet existant, en supprimant l'option de compilation /CLR qui compile en (C++/CLI) pour la .Net
Donc si tu supprimes l'option /CLR tu vas faire tu "vrai C++", du C++ standard (standard au sens du langage et non au sens de "visual standard hein...) MAIS tu ne pourras plus utiliser les classes .Net et ton code sera à ré-écrire en (vrai) C++
Tous les String^ par exemple correspondent à des pointeurs managés en C++/CLI et ne seront compris par aucun compilateur C++, même celui de Visual si l'option /CLR est enlevée.
En revanche tu n'auras pas MFC avec Visual Standard. Sauf erreur de ma part, MFC tu ne l'as qu'à partir de Visual 2005 professionnel. Mais bon MFC est dépassé et mal foutu. Tu peux très bien, à la place, utiliser ton Visual et une librairie C++ "à fenêtres" comme Qt ou une autre encore.

Quote:
Chacun considère l'outil qu'il maitrise comme le meilleur, il en va du domaine du developpement comme dans d'autres choses.

Dans cette discussion, il n'est pas question de défendre ce que je pense meilleur, mais de bien faire passer le message que tu ne fais pas du C++, mais du C++/CLI ce qui est un *autre* langage.
Cela dit, tu peux très bien trouver ton bonheur en C++/CLI. Ca ne me dérange pas
Et Visual C++ est globalement un très bon environnement qui te permet de faire du C++ ou du C++/CLI. Tu as cet outil, très bien.
Quote:
Je suis incapable de comparer avec un autre langage de programmation. Peut être vas tu m'éclairer???

A quel niveau comparer ?
Moi je n'aime pas C++/CLI pour plein de raisons telles que: pas portable, pas standard, pas ceci, pas cela, mais tu peux très bien trouver ton bonheur avec, selon tes besoins et ce que tu veux faire.
Par contre si tu continues de travailler avec C++/CLI sois gentil de poster dans le forum DotNet et pas C++, puisque ce n'est pas du C++ ;)
C++/CLI est un langage pour la plate-forme .Net
Quote:
il fallait aussi mettre "fir_ou_dir[i]

Certes, je me suis arrêté à la première erreur qui correspondait au message émis par le compilateur :)
Quote:
Je reviendrai

Bienvenue sur ce forum. :)
Quant à moi je retourne à mes vacances. :D