cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
20 oct. 2004 à 18:37
kikuro
Messages postés5Date d'inscriptiondimanche 22 février 2004StatutMembreDernière intervention16 mars 2005
-
16 mars 2005 à 16:53
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
kikuro
Messages postés5Date d'inscriptiondimanche 22 février 2004StatutMembreDernière intervention16 mars 2005 16 mars 2005 à 16:53
Oui je ne l'ai développé que sous linux (sous VI pour etre precis :p) et je n'ai jamais penser à en faire un équivalent windows quoi que je pourai surement le faire mais cela me tente beaucoups moins...
Merci aussi pour le "ls" qui est c'est sur plus efficace mais bon c'est pas ce qui va me faire coder en C tout ca..
lolo32
Messages postés36Date d'inscriptionmercredi 13 février 2002StatutMembreDernière intervention 6 juin 2006 7 janv. 2005 à 12:29
@Ardeje26
La fonction de kikuro a été écrite, comme indiqué dans le nom, pour des systèmes *nux (Linux, Unix), donc, qui ne fonctionne pas avec Visual C++ ou Borland C++, car la fonction n'est pas prévue pour fonctionner sous Windows.
Ardeje26
Messages postés6Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention22 juin 2009 7 janv. 2005 à 11:18
Voici le code remixé de kikuro.
Impossible de faire fonctionner son code en visual c++ ou borland builder 6 (c++),toujours 2 dossiers, 0 fichiers.
Surement un probleme de débutant,enfin voila un code simple qui permet de trouver le nombre de fichier et de dossier dans un répertoire.
Pour recréer ce projet simplement recréer (sous builder) :
-1 "Button" Button1
-3 "Edit" Edit1 Edit2 Edit3
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char argv[20];
DIR *fold;
struct dirent *read;
struct stat infos;
int total 0, nbFiles 0, nbDir = 0;
strcpy(argv,Edit4->Text.c_str()); //récupère l'adresse du répertoire a scanner
fold = opendir(argv);
if(fold==NULL)
{
//printf("Adresse du répertoire non valide");
MessageBox(NULL,"Adresse du répertoire non valide","Erreur",MB_OK);
return;
}
int num=0;
char buff[50];
read = readdir(fold); // résultat à la lecture : "."
read = readdir(fold); // résultat à la lecture : ".."
while(read = readdir(fold)) //passe au dossier ou fichier suivant
{
stat(read->d_name, &infos);//récupère les noms dossier+fichier contenu dans le dossier sélectionné
strcpy(buff,read->d_name);
num=0;
while(1)
{
if(buff[num]=='.')//"." trouvé dans le nom -> nom de fichier
{
nbFiles++;
break;
}
if(strlen(buff)==num)//aucun "." trouvé dans le nom -> nom de dossier
{
nbDir++;
break;
}
num++;
}
total++;
}
//printf("Fichiers : %d\nDossiers : %d\nTotal : %d\n", nbFiles, nbDir, total);
Edit1->Text=nbFiles;//Affiche nombre de fichier
Edit2->Text=nbDir;//Affiche nombre de dossier
Edit3->Text=total;//Affiche nombre total de fichier + dossier
}
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 22 oct. 2004 à 21:48
encore une fois
ls ... | wc -l
et le formatage de la sortie depend bien du terminal, comme on peut le faire avec curse
fais gaffe qu'avec >> tu append
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 22 oct. 2004 à 21:29
ls .... >> 1.txt
ensuites tu comptes le nombre de lignes dans 1.txt et tu suprimes 1.txt
bon oki ça fgait bcp d'apels systèmes mais a l'origine linux a été créé pour que les dévelopeurs puissent faire confiance au système d'exploitation...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 21 oct. 2004 à 14:44
ls -1, pas ls -l (qui est plus lourd et toujours le probleme de la ligne en trop)
mais ca ne change rien au fait que
ls | wc -l, fonctionne
le formatage de ls doit etre lié au terminal, en sortie on recupere bien un resulatat ligne par ligne
ls > toto
lolo32
Messages postés36Date d'inscriptionmercredi 13 février 2002StatutMembreDernière intervention 6 juin 2006 21 oct. 2004 à 14:23
@djl
"ls /home/djl | wc -l" ne permet de compter que le nombre de ligne. Or, ls ne renvoie pas par défaut un résultat par ligne, à la différence de "ls -l ....."
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 20 oct. 2004 à 18:37
ls /home/djl | wc -l
pour les codes retour, utilise plutot des constantes ( un type enum par exemple)
16 mars 2005 à 16:53
Merci aussi pour le "ls" qui est c'est sur plus efficace mais bon c'est pas ce qui va me faire coder en C tout ca..
7 janv. 2005 à 12:29
La fonction de kikuro a été écrite, comme indiqué dans le nom, pour des systèmes *nux (Linux, Unix), donc, qui ne fonctionne pas avec Visual C++ ou Borland C++, car la fonction n'est pas prévue pour fonctionner sous Windows.
7 janv. 2005 à 11:18
Impossible de faire fonctionner son code en visual c++ ou borland builder 6 (c++),toujours 2 dossiers, 0 fichiers.
Surement un probleme de débutant,enfin voila un code simple qui permet de trouver le nombre de fichier et de dossier dans un répertoire.
Pour recréer ce projet simplement recréer (sous builder) :
-1 "Button" Button1
-3 "Edit" Edit1 Edit2 Edit3
Et voici le source:
//////////////////////////////////////////////////////////////////////////////////////////////
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char argv[20];
DIR *fold;
struct dirent *read;
struct stat infos;
int total 0, nbFiles 0, nbDir = 0;
strcpy(argv,Edit4->Text.c_str()); //récupère l'adresse du répertoire a scanner
fold = opendir(argv);
if(fold==NULL)
{
//printf("Adresse du répertoire non valide");
MessageBox(NULL,"Adresse du répertoire non valide","Erreur",MB_OK);
return;
}
int num=0;
char buff[50];
read = readdir(fold); // résultat à la lecture : "."
read = readdir(fold); // résultat à la lecture : ".."
while(read = readdir(fold)) //passe au dossier ou fichier suivant
{
stat(read->d_name, &infos);//récupère les noms dossier+fichier contenu dans le dossier sélectionné
strcpy(buff,read->d_name);
num=0;
while(1)
{
if(buff[num]=='.')//"." trouvé dans le nom -> nom de fichier
{
nbFiles++;
break;
}
if(strlen(buff)==num)//aucun "." trouvé dans le nom -> nom de dossier
{
nbDir++;
break;
}
num++;
}
total++;
}
//printf("Fichiers : %d\nDossiers : %d\nTotal : %d\n", nbFiles, nbDir, total);
Edit1->Text=nbFiles;//Affiche nombre de fichier
Edit2->Text=nbDir;//Affiche nombre de dossier
Edit3->Text=total;//Affiche nombre total de fichier + dossier
}
22 oct. 2004 à 21:48
ls ... | wc -l
et le formatage de la sortie depend bien du terminal, comme on peut le faire avec curse
fais gaffe qu'avec >> tu append
22 oct. 2004 à 21:29
ensuites tu comptes le nombre de lignes dans 1.txt et tu suprimes 1.txt
bon oki ça fgait bcp d'apels systèmes mais a l'origine linux a été créé pour que les dévelopeurs puissent faire confiance au système d'exploitation...
21 oct. 2004 à 14:44
mais ca ne change rien au fait que
ls | wc -l, fonctionne
le formatage de ls doit etre lié au terminal, en sortie on recupere bien un resulatat ligne par ligne
ls > toto
21 oct. 2004 à 14:23
"ls /home/djl | wc -l" ne permet de compter que le nombre de ligne. Or, ls ne renvoie pas par défaut un résultat par ligne, à la différence de "ls -l ....."
20 oct. 2004 à 18:37
pour les codes retour, utilise plutot des constantes ( un type enum par exemple)