A voir également:
- Parrot 3200 ls code p
- Code ascii - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code blocks - Télécharger - Langages
7 réponses
Le problème vient de ta fonction stat.
Tu fais stat(".",&taille). Donc le programme appliquera la fonction stat pour le même répertoire "." (répertoire courant).
Pour qu'à chaque itération, t'obtiennes la taille avec la fonction stat, tu dois plutôt faire quelque chose du genre :
Cdlt,
Tu fais stat(".",&taille). Donc le programme appliquera la fonction stat pour le même répertoire "." (répertoire courant).
Pour qu'à chaque itération, t'obtiennes la taille avec la fonction stat, tu dois plutôt faire quelque chose du genre :
struct stat taille; while ((lecture = readdir(rep))) { if(lecture->d_name[0] != '.') { stat(lecture->d_name,&taille); filesize = taille.st_size; printf("%s %d \n",lecture->d_name,filesize); }
Cdlt,
Salut,
Comment ça tu fais "ls -l" en C ? Tu as codé une fonction qui te liste les fichiers d'un répertoire ou tu utilises system("ls -l") ?
Et sur quel OS tu travailles ?
Cdlt,
Comment ça tu fais "ls -l" en C ? Tu as codé une fonction qui te liste les fichiers d'un répertoire ou tu utilises system("ls -l") ?
Et sur quel OS tu travailles ?
Cdlt,
je suis sur linux
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
int main()
{
// Utilisation de la structure dirent pour recuperer le nom du fichier
//
struct dirent *lecture;
DIR *rep;
// Se positionner dans le repertoire courant
//
rep = opendir(".");
// Tant qu'il y a des fichiers, afficher leur nom
//
while ((lecture = readdir(rep)))
{
printf("%s\n", lecture->d_name);
}
// Fermeture du repertoire
//
closedir(rep);
return 0;
}
voila le code
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
int main()
{
// Utilisation de la structure dirent pour recuperer le nom du fichier
//
struct dirent *lecture;
DIR *rep;
// Se positionner dans le repertoire courant
//
rep = opendir(".");
// Tant qu'il y a des fichiers, afficher leur nom
//
while ((lecture = readdir(rep)))
{
printf("%s\n", lecture->d_name);
}
// Fermeture du repertoire
//
closedir(rep);
return 0;
}
voila le code
C'est bizarre que ta commande "ls -l" t'affiches aussi "." et ".." car sous linux cette commande n'affiche pas les fichers cachés (qui sont tous les fichiers commençant par un ".")
Sous quel OS as-tu testé ton programme ?
Car sous Windows je ne sais pas si cette commande agit autrement ou si windows ne considère pas les "." et ".." comme cachés.
Sous quel OS as-tu testé ton programme ?
Car sous Windows je ne sais pas si cette commande agit autrement ou si windows ne considère pas les "." et ".." comme cachés.
je compile avec gcc...sa m'affiche bien le resultat attendu mais sa m'affiche le "." et ".." et je veux les enlever parce que apré quand j'essaye de recupere la taille du fichier et de l'afficher sa me met:
. 4096
..4096
etc
en faite la taille est bonne mais elle saffiche pas au bon endroit, c'est pour cela que je souhaiterais que qqun m'aide (si possible) a d'abord virer ces 2 trucs qui m'emerdent un peu!!! aprés pour la taille on verra
. 4096
..4096
etc
en faite la taille est bonne mais elle saffiche pas au bon endroit, c'est pour cela que je souhaiterais que qqun m'aide (si possible) a d'abord virer ces 2 trucs qui m'emerdent un peu!!! aprés pour la taille on verra
Utilise les expressions régulières pour enlever les fichiers qui commence par un "."
voici un lien utile pour les regex : https://nicolasj.developpez.com/articles/regex/
voici un lien utile pour les regex : https://nicolasj.developpez.com/articles/regex/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Les fichiers "." et ".." sont considérés comme cachés, particulier je suis d'accord, sous linux car si tu fais "ls -l" ils ne sont pas affichés. Par contre si tu fais "ls -al" ils ont affichés.
Les fichiers "." et ".." sont considérés comme cachés
Non et non. "." signifie le dossier courant et ".." le dossier père. Rien à voir avec la notion de cacher.
Et puis la fonction première de "ls -al" n'est pas que d'afficher les fichiers cachés mais d'afficher ceux qui commencent par "." Ce qui revient au même au final. Mais en tout cas "." et ".." n'ont rien à voir avec des fichiers cachés.
Non et non. "." signifie le dossier courant et ".." le dossier père. Rien à voir avec la notion de cacher.
Et puis la fonction première de "ls -al" n'est pas que d'afficher les fichiers cachés mais d'afficher ceux qui commencent par "." Ce qui revient au même au final. Mais en tout cas "." et ".." n'ont rien à voir avec des fichiers cachés.
Et si tu fais ça ?
if(lecture->d_name[0] != '.')
{
filesize = taille.st_size;
printf("%s %d \n",lecture->d_name,filesize);
}
est-ce que ça marche ?
if(lecture->d_name[0] != '.')
{
filesize = taille.st_size;
printf("%s %d \n",lecture->d_name,filesize);
}
est-ce que ça marche ?
Salut,
Le problème vient de ton stat.
Tu effectues stat(".", &taille).
Normal qu'il te donne la taille du dossier puisque "." désigne le dossier courant. Du coup tu as l'impression que ça marche pour la première itération alors que non.
Il faut que tu mettes le path du fichier en premier argument dans stat (donc à la place du point).
La taille te sera donnée alors dans taille.st_size de type off_t.
Cdlt,
Le problème vient de ton stat.
Tu effectues stat(".", &taille).
Normal qu'il te donne la taille du dossier puisque "." désigne le dossier courant. Du coup tu as l'impression que ça marche pour la première itération alors que non.
Il faut que tu mettes le path du fichier en premier argument dans stat (donc à la place du point).
La taille te sera donnée alors dans taille.st_size de type off_t.
Cdlt,
ouais mais dans ce cas sa veut dire que si mon fichier source je le met dans un autre endroit il va mdire path incorrect nn?
par exemple la jtravaille ds le repertoire X on va dire donc toi sque tu me dis si g bein compri sa serait de mettre
stat("X",....) en admettant que X se situe a la racine de l'arbo;
mais est ce que si je prend mon fichier .c et que je le met dans un dossier Y il va faloir que je change le path je pense nn?
se que je voudrais c'est que sa soit "generique" en qq sorte enfin si c possible
par exemple la jtravaille ds le repertoire X on va dire donc toi sque tu me dis si g bein compri sa serait de mettre
stat("X",....) en admettant que X se situe a la racine de l'arbo;
mais est ce que si je prend mon fichier .c et que je le met dans un dossier Y il va faloir que je change le path je pense nn?
se que je voudrais c'est que sa soit "generique" en qq sorte enfin si c possible