|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
[C] creare una lista dei file presenti in una directory
ciao a tutti! allora come da titolo, vorrei sapere come posso fare in c una lista con tutti i file presenti in una cartella.. per la lista so benissimo come farla, mentre il mio problema sta proprio nei nomi dei file..
io in pratica voglio farmi un programma che rinonimi tutti i file presenti in una cartella con uno stesso formato. e quindi pensavo prima di creare una lista dinamica con tutti i nomi dei file, e poi utilizzando la funzione rename() rinominare tutti i file che non rispettano lo "standard" che interessa a me.. tanto che ci sono.. e se volessi che il programma vada a cercare in una ben definita cartella che gli passo da linea di comando, invece che cercare solo nella cartella in cui lancio il programma, come potrei fare? oppure per fargli analizzare tutti i file presenti in una cartella, ma anche nelle cartelle sottostanti?? grazie in anticipo
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bottegone (PT)
Messaggi: 978
|
Appoggiarti ai comandi di sistema??
Nn so, parlando sotto *UNIX. ls > file_presenti Apri il file in C e poi hai i nomi li inserisci nella lista e fai tutto quello ke vuoi. Può funzionare? CIao
__________________
TC FUCKKKKKKKKKKKKKKKKKKKKKK | Pronto per il prossimo raduno, Oh YEAHHHH
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
concordo, se invece usi windows puoi usare dir /B >elenco.txt
__________________
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
cavolo non ci avevo proprio pensato
grazie per l'info! solo per complicarmi la vita.. non c'è un modo per farlo fare al programma "dir /B >elenco.txt" (il programma che mi voglio fare per ora mi serve solo su sistemi win..) ??? cioè in modo che sia completamente automatico, io clicco sull'eseguibile e fa tutto lui spero di non aver chiesto troppo...
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bottegone (PT)
Messaggi: 978
|
Allora se ho capito bene basta fare:
Codice:
system("dir /B > elenco.txt");
__________________
TC FUCKKKKKKKKKKKKKKKKKKKKKK | Pronto per il prossimo raduno, Oh YEAHHHH
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
thx
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
se ti interessa saperlo fare in C senza dover fare system o dir
ti mando un esempio. Ti stampa a video tutti i files (anche link,dir ...) che trova nella cartella passata come argomento Codice:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
void main( int argc, char **argv )
{
DIR *dirp = NULL;
struct dirent *dp;
dirp = opendir( argv[1] );
while (dirp)
{
errno = 0;
if ((dp = readdir(dirp)) != NULL)
{
puts(dp->d_name);
}
else
{
closedir(dirp);
dirp = NULL;
}
}
}
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
Quote:
avrei da chiederti alcune cose riguardo il codice: - struct dirent da che campi è formata?? c'è name che sarà il nome del file, ma gli altri campi? - dirp = opendir( argv[1] ); cosa fa il resto l'ho capito.. graize mille!
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
According to POSIX, the dirent structure contains a field char d_name[] of unspecified size, with at most NAME_MAX characters preceding the terminating null character. Use of other fields will harm the portability of your programs. POSIX 1003.1-2001 also documents the field ino_t d_ino as an XSI extension. Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#10 | |||
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
struct dirent
{
ino_t d_ino; /* "inode number" of entry */
off_t d_off; /* offset of disk directory entry */
unsigned short d_reclen; /* length of this record */
char d_name[1]; /* name of file */
};
Quote:
Codice:
typedef struct
{
int dd_fd; /* file descriptor */
int dd_loc; /* offset in block */
int dd_size; /* amount of valid data */
char *dd_buf; /* directory block */
} DIR; /* stream data from opendir() */
e restituisce l'informazione. argv[1] é il primo parametro che passi all'eseguibile. se hai un file di nome "pippo.exe" che stampa il primo parametro a video, nel codice trovi: Codice:
printf( argv[1] ); Quote:
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|||
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Oct 2005
Messaggi: 290
|
ri-grazie
appena ho tempo provo, poi se ho qualche casino ti chiederò ancora ciau
__________________
_______________________________________________ AMD Athlon64 3500+, Cooler Master Hyper 6, Asus A8V Deluxe wifi-g Rev2.0, Corsair TwinX-1024 Pc3200XL Platinum, Western Digital Raptor 74GB, Cooler Master CoolDrive 4, Sapphire Radeon 9600XT 256MB, Sound Blaster Audigy Player, Cambridge Soundworks 4.0, Enermax Coolergiant EG485p/ax, Lg Flatron L1952S --- Acer Aspire 5024 ![]() Apple MacBook Pro 13" 2.53GHz |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:04.




















