PDA

View Full Version : Aiuto in c...


Logan12584
04-02-2004, 09:21
Questo ่ un programma che legge una directory che gli diamo ma nn legge eventuali sottodirectory e file nascosti e soprattutto legge i file a 8 caratteri poi mette le tilde (̃̃ )...mentre la seconda opzione dice gli attributi di un file che gli diamo anche se ่ nascosto o se ่ una cartella.

ora..come faccio a leggere tutti i file presenti in una cartella e in tutte le sue sottocartelle se non mi dice quali sono le sottocartelle (senza sapere questo nn posso fare la ricorsione).
e soprattutto come faccio a leggere i file in tutta la loro lunghezza ??

prima usavo il borland versione 3 (molto molto molto vecchio)..ora st๒ usando il dev c++ 5 beta (anche se nn ancora lo uso bene..)..
questo programma deve essere fatto in c..

help please

#include <time.h>
#include <stddef.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <dir.h>
int main(void)
{
struct time t;
unsigned attrib;
int a=0,i=0;
do{
//Questa parte qui sotto, fa vedere i files in una diretory
clrscr();
printf("Premi un tasto per iniziare");
delay(20);
if (kbhit())
{
clrscr();
gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n",
t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);
cout<<"\n \n \n 1) Esaminare una directory data";
cout<<"\n 2) Esaminare gli attributi di un file dato";
cout<<"\n 6) Exit \n";
cin>>a;
if (a==1)
{
clrscr();
struct ffblk ffblk;
char files_letti[12];
char copia_files_letti[12];
char directory[12];
char temp[12];
char tipofile[10];
int done;
cout<<"\n Esamina la directory: ";
scanf("%s",directory);

done = findfirst(directory,&ffblk,0);
strcpy(copia_files_letti,directory);
strcat(copia_files_letti,"\\*.*");
strcat(directory,"\\");
strcpy(temp,directory);
cout<<"\n devo leggere: "<<copia_files_letti<<"\n";
strcpy(tipofile,copia_files_letti);
done = findfirst(tipofile,&ffblk,0);

while (!done)//Esce dal ciclo di lettura quando done=1
{
strcat(directory,ffblk.ff_name);
cout<<"\n Leggo= "<<directory;


if (_dos_getfileattr(directory,&attrib) != 0)

{
printf(" No info sugli attributi di tale file \n");
return 1;
}
if (attrib & _A_RDONLY)
printf(" e' di sola lettura.");
if (attrib & _A_HIDDEN)
printf(" e' nascosto.");
if (attrib & _A_SYSTEM)
printf(" e' un file di sistema.");
if (attrib & _A_VOLID)
printf(" e' etichetta di volume.");
if (attrib & _A_SUBDIR)
printf(" e' una directory.");
if (attrib & _A_ARCH)
printf(" e' un file archivio.");
// getch();

strcpy(directory,temp);

done = findnext(&ffblk);

if (i==43)
{

i=0;
printf("\n\n Premi un tasto per continuare \n");
getch();
}
else
i++;


}
printf("\n\n Fine ricerca \n");
getch();
i=0;
}else
if (a==2)
{
clrscr();
char *FileDaCercare;
char *p;
cout<<"File da cercare: ";

scanf("%s",FileDaCercare);
p = searchpath(FileDaCercare);
printf("Searching result: %s\n", p);
getch();


if (_dos_getfileattr(FileDaCercare,&attrib) != 0)
{
perror(" No info sugli attributi di tale file");

return 1;
}
if (attrib & _A_RDONLY)
printf("%s e' di sola lettura.\n", FileDaCercare);
if (attrib & _A_HIDDEN)
printf("%s e' nascosto.\n", FileDaCercare);
if (attrib & _A_SYSTEM)
printf("%s e' un file di sistema.\n", FileDaCercare);
if (attrib & _A_VOLID)
printf("%s e' etichetta di volume.\n", FileDaCercare);
if (attrib & _A_SUBDIR)
printf("%s e' una directory.\n", FileDaCercare);
if (attrib & _A_ARCH)
printf("%s e' un file archivio.\n", FileDaCercare);
getch();

}else

if ((a!=1)&&(a!=2)&&(a!=6))
{
cout<<"\n Ripetere la scelta";
getch();
}
}
}while(a!=6);
}

cionci
04-02-2004, 10:31
if (attrib & _A_SUBDIR)
printf("%s e' una directory.\n", FileDaCercare);

Le sottodirectory hanno l'attributo _A_SUBDIR, basta richaimare la funzione ricorsivamente quando trovi quell'attributo...

Logan12584
04-02-2004, 19:12
il problema e che nn mi trova le sottodirectory.... :cry: