Oppure

Loading
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
19/07/10 11:18
redo86
up:)
aaa