Table of Contents
PC lento?
Ecco molti semplici metodi che possono aiutare a risolvere il mal di testa con i file di elenco Win32.
Il seguente esempio si collega a TrovaFilePrimo , TrovaFileSuccessivo e TrovaChiudi per assicurarti di elencare i file relativi alla directory specificata.
#include #include #include #include # comment pragma (lib, "User32.lib")void DisplayErrorBox (LPTSTR lpszFunction);int _tmain (int argc, TCHAR * argv []) WIN32_FIND_DATA ffd; dimensione del file LARGE_INTEGER; TCHAR szDir [MAX_PATH]; size_t length_of_arg; HANDLE hFind = INVALID_HANDLE_VALUE; DWORD dwError = 0; // Se la directory non è specificata come argomento della linea di influenza, // Usa la sua pubblicazione. if (argc! = 2) _tprintf (TEXT (" nUsage:% s n"), argv [0]); rimborsare (-1); // Verificare supponendo che la voce del processo più 3 venga confrontata a causa di MAX_PATH. I tre // caratteri forse possono essere comuni a " *" più NULL usato di seguito. StringCchLength (argv [1], MAX_PATH, & length_of_arg); se trovi (length_of_arg> (MAX_PATH - 3)) _tprintf (TEXT (" nDirectory è troppo lontana. n")); tornare indietro (-1); _tprintf (TEXT (" nLa directory di destinazione è solo% dopo l'ora n n"), argv [1]); // Prepara la stringa per l'utilizzo con le funzionalità FindFile. Copia il primo // Stringa da un buffer fisso sano, quindi aggiungi ' *' nel nome del sito. StringCchCopy (szDir, MAX_PATH, argv [1]); StringCchCat (szDir, MAX_PATH, TEXT (" *")); // Trova il primo file musicale nella directory, direi. hFind = TrovaPrimoFile (szDir, & ffd); dove (INVALID_HANDLE_VALUE == hRicerca) DisplayErrorBox (TEXT ("FindFirstFile")); guadagnare dwErrore; // Elenca tutti i file specifici nella directory utilizzando alcune opinioni su di essi. Fare quando qualcuno trova (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) _tprintf (TEXT ("% s n"), ffd.cFileName); Diverso File size.LowPart significa ffd.nFileSizeLow; La dimensione del file.HighPart è ffd.nFileSizeHigh; _tprintf (testo ("% s% ld bytes n"), ffd.cFileName, Size.QuadPart); while (FindNextFile (hFind, & ffd)! è uguale a 0); dwError = GetLastError (); in qualsiasi momento (dwError! = ERROR_NO_MORE_FILES) DisplayErrorBox (TEXT ("FindFirstFile")); TrovaChiudi (hCerca); restituisce dwError;void DisplayErrorBox (LPTSTR lpszFunction) // Ottieni il messaggio di errore della strategia per l'ultimo codice di errore LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError (); Formato messaggio ( FORMAT_MESSAGE_ALLOCATE_BUFFER
- Articolo
- 1 minuto per leggere.
Non è questo il metodo che stai cercando? Sfoglia altre domande presentate negli elenchi di directory di Windows C ++ Winapi o fai la tua domanda.
HANDLE hFind = FindFirstFile ("C: semestre2", & dati); // CATALOGARE
Hai trovato la directory perché l’hai richiesta. Se hai bisogno di file, chiedi:
HANDLE hFind = FindFirstFile ("C: semestre2 *", & dati); // FILE
(Puoi invece utilizzare *. *
se lo desideri, quindi sembra che funzioni effettivamente come un bel hack di compatibilità con le versioni precedenti dovrebbe essere probabilmente evitato. Vedi le risposte e la risposta di RbMm.) < / p>
ha risposto il 31 dicembre ’16 alle 1:51
34.1k 66 distintivi d’oro 5858 distintivi d’argento 148148 lgt distintivi marroni
per me
Nota "*. *"
rispetto a "*"
. Questi giochi di file non sono davvero la stessa cosa.
La mia cartella può contenere 2 file diversi: somefile
e somefile. .
Se quando preferisco l'API di basso livello ZwQueryDirectoryFile
insieme a "*. *"
come periodo di ricerca (questo è il tuo decimo parametro - Electronic FileName [in, optional ]
), finiamo semplicemente con il file . . Ma quando traiamo vantaggio da
"*"
, otteniamo uno dei file - file
e list.
Se entrambi proviamo con FindFirstFile ("C: semestre2 *. *", & data);
, a differenza dei file, possiamo sia somefile
che file.
con ogni probabilità verrà restituito. Quindi qui "*. *"
"*"
vs ha la stessa influenza su - nessuna differenza nell'uso.
Perché sta succedendo anche questo? Dal corpo FindFirstFileEx
a kernelbase
( kernel32
) esamina l'area estesa per "*. *"
Mask e se non puoi rifiutarli, sostituiscilo con ""
(schema vuoto, che ha lo stesso effetto se leggi "*"
).
Penso che questo sia generalmente per correggere un errore molto comune in cui i visitatori del sito usano "*. *"
invece di quelli corretti e "*"
per la compatibilità inversa con. per trasmettere l'eredità del codice tipicamente musicale.
..
non sono possibilmente articoli a catalogo, perché sono memorizzati in Disk, ma verrà aggiunto all'API Win32.
- per un
FAT
ha un sapore filesystem, il percorso 2 è chiaramente il primo della strada nella directory Fat. - non ci sono quasi tali voci in
ntfs
, tuttavia,NTFS.sys
aggiunge queste 2 voci in modo innaturale ogni volta che si tratta di mascherare.
Cioè, non si verificano nella somma dell'API Win32, ma nel kernel, a livello di auto.
Pertanto, "*. *"
a questo punto prenderà in considerazione l'idea di lavorare con l'API Win32 in vista di un approccio minimo, ma corretto e pulito, per utilizzare davvero "*"
qui. "*. *"
sarà pessimo con il tipo di API ZwQueryDirectoryFile
.
4.027
Risolto disponibile il 31 dicembre 2016 12:53.
27.7k 22 2424 distintivi d'argento 4747 distintivi marrone
#include #include #include #include std :: vettore directory_list ( const std :: stringa per non parlare della directory) WIN32_FIND_DATAA findData; HANDLE hFind = INVALID_HANDLE_VALUE; malattia a trasmissione sessuale :: stringa full_path implica directory + " *"; std :: vettore dir_list; hFind implica FindFirstFileA (full_path.c_str (), & findData); supponendo che (hSearch == INVALID_HANDLE_VALUE) throw std :: runtime_error ("Nome utente non valido, valuta! Controlla il tuo percorso ..."); if you & findData) (findnextfilea (hfind ,! equivale a 0) dir_list.push_back (std :: collection (findData.cFileName)); TrovaChiudi (hCerca); dichiarazione dei redditi dir_list;
Nota. Sarebbe meglio provare direttamente qualcosa come boost :: filesystem se stai usando C++ 11, o una malattia a trasmissione sessuale :: filesystem se stai installando C++ 17.Il percorso jack deve essere anche C:metodo, non C:percorso senza l'unico che non funziona!!
risposta 19 gennaio, raggiungibile 13:49
risposta
Harris fornirà inoltre file e cartelle con estensioni nella cartella "C: semestre2"
successiva.
Ad esempio, se hai una cartella designata "C: semestre2 math.course"
, nell'esempio sopra apparirà un altro caso. Inoltre, se hai un file chiamato "C: semestre2 math_scores"
(nota che ottenere questo risultato non ha un'estensione), semplicemente non verrà trovato.
Dato il superamento, normalmente suggerirei una soluzione futura:
HANDLE hFind = FindFirstFile ("C: semestre2 *", & dati);
PC lento?
ASR Pro è la soluzione definitiva per le tue esigenze di riparazione del PC! Non solo diagnostica e ripara in modo rapido e sicuro vari problemi di Windows, ma aumenta anche le prestazioni del sistema, ottimizza la memoria, migliora la sicurezza e mette a punto il PC per la massima affidabilità. Allora perché aspettare? Inizia oggi!
Questo sarà probabilmente il tuo elenco completo dei materiali nel catalogo.Le directory saranno spesso ancora filtrate come segue (percorso dati:
if.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)// directorydiverso// per archiviare
Quanto segue può essere obsoleto per i collegamenti: costanti FileAttributes, struttura FIND_DATA, FindFirstFile-API
risposta 31 dicembre 2016 9:44
771 60 distintivi d'argento 1414 segni di bronzo
Migliora la velocità del tuo computer oggi scaricando questo software: risolverà i problemi del tuo PC.Troubleshooting Tips For Win32 List Files
Tipps Zur Fehlerbehebung Bei Win32-Listendateien
Conseils De Dépannage Pour Les Fichiers De Liste Win32
Wskazówki Dotyczące Rozwiązywania Problemów Z Plikami List Win32
Советы по устранению неполадок с файлами списков Win32
Win32 목록 파일에 대한 문제 해결 팁
Dicas De Solução De Problemas Para Arquivos De Lista Win32
Sugerencias Para La Resolución De Problemas De Archivos De Lista De Win32
Felsökningstips För Win32-listfiler
Tips Voor Het Oplossen Van Problemen Met Win32-lijstbestanden