15/07/10 0:22
redo86
Ciao a tutti, ho un problema con una porzione di codice di un programma; che mentre su windows xp funziona correttamente, su windows 7 anche dando al programma i privilegi di amministratore, mi da errori a runtime.
Quello che vorrei fare è visualizzare la lista dei file contenuti in una directory, ma mi basta, per il momento, anche riuscire a visualizzare solo il primo.
La porzione di codice che uso è la seguente:
...
HANDLE hFind = FindFirstFile( path.c_str(), &fd);
cout<<fd.cFileName;
...
Su windows 7, in alcune directory tutto procede regolarmente, mentre in altre la cout butta fuori dei caratteri strani, come se non riuscisse a leggere i file.
Ripeto che ho provato ad eseguire il programma con i privilegi di amministratore, ma nulla; chiedo a voi..qualche idea =)?
p.s.
se puo essere utile ho sviluppato il programma su microsoft visual studio express 2010.
aaa
15/07/10 15:22
nessuno
Ci sono delle cartelle a cui neanche l'administrator può accedere ... può darsi che il problema fosse solo quello ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
15/07/10 16:50
redo86
Veramente
? questa non la sapevo.
EDIT: credo di aver capito quale sia il problema, praticamente navigando dal programma vedo piu directory e file di quelli che vedo navigando col mouse; infatti entrande da programma in quelle cartelle ho il problema, se entro nelle altre invece no.
Ora la domanda quindi è: come faccio a visualizzare solo i file, in una directory, non nascosti?:P
Comunque windows 7 ha nella home utente sia documenti sia documents, la prima a quanto pare è protetta anche da administrator la seconda no<.< .
Comunque vi posto il codice della funzione per intero:
int print_dir(const char *szDir, bool bCountHidden = false)
{
//in file ci va concatenato tutto l'output della dir
char ok;
string file;
char file_size[20];
int count_file=0;
string path;
WIN32_FIND_DATA fd;
DWORD dwAttr = FILE_ATTRIBUTE_DIRECTORY;
if( !bCountHidden) dwAttr &=~ FILE_ATTRIBUTE_HIDDEN;
path=szDir ;
path+= "\*";
HANDLE hFind = FindFirstFile( path.c_str(), &fd);
if(hFind != INVALID_HANDLE_VALUE)
{
int count = 0;
do
{
if( !(fd.dwFileAttributes & dwAttr)){
count++;
file+="\t\t";
_itoa_s(fd.nFileSizeLow,&file_size[0],20,10);
file+=fd.cFileName;
file+="\t\t\t";
file+=file_size;
file+=" B";
file+="\n";
}
else{
file+="<DIR>\t\t"; //notifico che è una directory
file+=fd.cFileName; //aggiungo il nome della dir al buffer
file+="\n";
}
if(file.size()>4000){
/*AZZERARE FINE=RECV CLIENT*/
cout<<file;
system("pause");
//output su una console senza generare overflow
file.clear();
}
}while( FindNextFile( hFind, &fd));
file+="\n\n";// invio l'ultimo pacchetto del buffer
cout<<file;
FindClose( hFind);
return count;
}
return -1;
}
mandando false al secondo parametro della funzione visualizzo i file nascosti, mandando true pensavo di vedere solo i normali, invece nulla.
Ho anche provato a fare qualcosa del tipo:
dwAttr &=~ FILE_ATTRIBUTE_NORMAL; ma continuo a vedere anche i file nascosti:P
come fare?
Ultima modifica effettuata da redo86 15/07/10 17:29
aaa