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
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^ ???
J'au eu de la misere a comprendre ton code, mais si tu veut un coup de main, regarde ici: http://msdn2.microsoft.com/en-us/library/system.io.filesysteminfo.aspx
Et pour convertir un int en string, ben je ne sais que le faire en c.
Par explemple, tu peut faire:
int i = 352;
char c[32];
sprintf(c, "%d", i);
ps: sprintf ajoute le "NULL character" a la fin automatiquement...
Grand merci à Vortex666 d'avoir donner un peu de sontemps pour me répondre.
En fait , j'ai trouvé la solution à mes problèmes à force de fouiller dans la doc MSCN Library que j'ai en français (livrée avec Microsoft Visual Studio 2005) et surtout en me creusant la cervelle pour faire la distinction entre pointeur de Array et élément de Array. Il suffisait dans mon code de mettre "fich_ou_dir[i]" puisque j'étais dans un "for" pour tester tous les éléments du Array.
Pour la question basique de transformation, j'ai aussi les solutions:
- de int num = 22; en String ===> num.ToString() (remplace le itoa en C).
- de String^ txt = "00123"; en Int ===> Convert::ToInt32(txt) (remplace le atoi en C.
Encore merci à toi Vortex666 et je pense encore venir ici car j'ai beaucoup de choses à découvrir. Mais je ne suis qu'un programmeur amateur et je travaille sur un projet personnel de sauvegarde de disque sur un autre sans faire une copie "bestiale" de tous les fichiers et répertoires mais uniquement des fichiers modifiés depuis la dernière sauvegarde (je dois économiser un temps fou)... Voila c'est déjà un tres bon exercice....