FC - FONCTION (NUX ONLY)

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 20 oct. 2004 à 18:37
kikuro Messages postés 5 Date d'inscription dimanche 22 février 2004 Statut Membre Dernière intervention 16 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.

https://codes-sources.commentcamarche.net/source/26991-fc-fonction-nux-only

kikuro Messages postés 5 Date d'inscription dimanche 22 février 2004 Statut Membre Dernière intervention 16 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és 36 Date d'inscription mercredi 13 février 2002 Statut Membre Derniè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és 6 Date d'inscription jeudi 22 janvier 2004 Statut Membre Dernière intervention 22 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

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
}
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
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és 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
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és 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
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és 36 Date d'inscription mercredi 13 février 2002 Statut Membre Derniè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és 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 oct. 2004 à 18:37
ls /home/djl | wc -l

pour les codes retour, utilise plutot des constantes ( un type enum par exemple)