sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 2010
-
2 févr. 2006 à 17:08
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 2010
-
3 févr. 2006 à 18:05
bjr ,
me remettant au c++ pour la enieme fois je voulais creer un petit programme permettant de lister les fichier d'un certain type alors je commence mais des les premiere ligne je suis bloqué :
comment creer un objet fichier (je resonne peut etre un peu java mais bon...) ?
j'ai trouver des choses mais rien qui ne m'aille!!
donc en gros ce que je voudrasi savoir c'est :
-comment creer un objet "file" ou "directory"?
-y appliquer des fonction permettant de le lister ?
ou alors de la doc la dessus !! je n'en ai pas trouvé
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 3 févr. 2006 à 02:45
Le principe du handle est pareil pour linux aussi.
A l'ouverture d'un fichier, la fonction CreateFile retourne un handle. Grâce à ce handle, on peut faire toutes les opérations
voulues sur ce fichier comme la lecture, l'écriture, la fermeture etc en appelant les fonctions adéquates.
Il existe d'autres sortes de handles comme HWND pour les fenetres, les
boutons, les statics etc. Pour manipuler un bouton, le griser,
le cacher, le déplacer etc on founit ce HWND à la fonction
adéquate. Pareil pour les autres types de handles pour les polices
(HFONT), les images
bitmap (HBITMAP) , les menus (HMENU), les ressources (HRSRC) etc.
La programmation C/C++ sous Windows en utilisant les APIs, te permet de
bien comprendre le fonctionnement du système. Cela t'aidera à bien
concevoir des programmes performants. Les programmes s'exécutent en
appelant directement les fonctions du système (APIs). Ils sont donc
plus petits
et plus rapides.
Le JAVA est un langage interprété. Les programmes conçus ainsi ont
besoin d'un traducteur (Machine virtuelle java) avant d'être exécutés.
Ce qui implique
une grande perte de performances et de ressources système. Le seul
avantage de cette technique est le fait que ça tourne sur tous les OS
(Windows, Linux
Mac OS etc) car chacun dispose de sa propre machine virtuelle java.
Donc, pour faire de la vraie programmation, apprend les bases du
langage C, entraine toi en faisant de petits programmes, puis peu à peu
tout devient facile
avec l'habitude. Tu trouveras sur ce site de nombreux codes et tutoriels.
int main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData; //represnte pour le moment un fichier vide
HANDLE hFind = INVALID_HANDLE_VALUE; // je sais aps trop l'expliquer ... le processus on va dire
char DirSpec[MAX_PATH + 1]; // directory specification
DWORD dwError; //double mot pour une erreur je presume
printf ("Target directory is %s.\n", argv[1]);//on affiche le fichier passer par argument
strncpy (DirSpec, argv[1], strlen(argv[1])+1);//on le copi dans dirspec en faisant attention au debordement
strncat (DirSpec, "\\*", 3);//on coupe mais je ne sais pas trop pourquoi
hFind = FindFirstFile(DirSpec, &FindFileData);//on copie le premier fichier trouver de dirspec dans FindFileData et on recupere le code
//de l'operation dans hfind
if (hFind == INVALID_HANDLE_VALUE) {
/*
au cas ou le code retourne serait une erreur bien que je ne
sache pas ou est ce qu'il trouve INVALID_HANDLE_VALUE
*/
printf ("Invalid file handle. Error is %u\n", GetLastError());//affiche le message d'erreur
return (-1);//quitte le prog
}
else //si c'est bon
{
printf ("First file name is %s\n", FindFileData.cFileName);//on affiche le champs cFileName de la variable (pointeur ?)FindFileData
while (FindNextFile(hFind, &FindFileData) != 0) //tant qu'il y a encore des fichier ...
{
printf ("Next file name is %s\n", FindFileData.cFileName);//...on l'affihe
}
dwError = GetLastError();// je pense que c qqchose pour recuperer une erreur mais ou est declaré GetLastError
FindClose(hFind);//fermeture du flux
if (dwError != ERROR_NO_MORE_FILES) //la je comprend plus :$ :s
{
printf ("FindNextFile error. Error is %u\n", dwError);
return (-1);
}
}
return (0);
}
voila ... est ce que vous pourriez apportez quelques precision sil vous plait ?
merci
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 2 févr. 2006 à 18:10
#define _WIN32_WINNT 0x0501 //heuu ca si qqun pouvez me l'expliquer ??
#include <windows.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData; //represnte pour le moment un fichier vide
HANDLE hFind = INVALID_HANDLE_VALUE; // je sais aps trop l'expliquer ... le processus on va dire
char DirSpec[MAX_PATH + 1]; // directory specification
DWORD dwError; //double mot pour une erreur je presume
printf ("Target directory is %s.\n", argv[1]);//on affiche le fichier passer par argument
strncpy (DirSpec, argv[1], strlen(argv[1])+1);//on le copi dans dirspec en faisant attention au debordement strncat (DirSpec, "\\*", 3);//on coupe mais je ne sais pas trop pourquoi
hFind = FindFirstFile(DirSpec, &FindFileData);//on copie le premier fichier trouver de dirspec dans FindFileData et on recupere le code //de l'operation dans hfind
if (hFind == INVALID_HANDLE_VALUE) {
/*
au cas ou le code retourne serait une erreur bien que je ne sache pas ou
est ce qu'il trouve INVALID_HANDLE_VALUE
*/
printf ("Invalid file handle. Error is %u\n", GetLastError());//affiche le message d'erreur
return (-1);//quitte le prog
} else //si c'est bon
{ printf ("First file name is %s\n", FindFileData.cFileName);//on affiche le champs cFileName de la variable (pointeur ?)FindFileData
while (FindNextFile(hFind, &FindFileData) != 0) //tant qu'il y a encore des fichier ...
{ printf ("Next file name is %s\n", FindFileData.cFileName);//...on l'affihe
} dwError = GetLastError();// je pense que c qqchose pour recuperer une erreur mais ou est declaré GetLastError FindClose(hFind);//fermeture du flux
if (dwError != ERROR_NO_MORE_FILES) //la je comprend plus :$ :s
{
printf ("FindNextFile error. Error is %u\n", dwError);
return (-1);
}
}
return (0);
}
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 févr. 2006 à 19:13
Je ne fais pas de java donc...
Le handle est une valeur que le système te fournit sur un retour d'API, le prog user s'en sert pour appels d'autres APIs et basta. On ne doit jamais en changer soi même la valeur ni lui attribuer quoi que ce soit sinon devient invalide.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 févr. 2006 à 19:16
En interne (le kernel) c'est un pointeur vers une zone mémoire mais un prog user ne doit jamais essayer de déréférencer le pointeur, l'adresse du pointeur est invalide dans l'espace du processus en mode user.
Il faut donc considérer le handle comme une simple valeur.