Table of Contents
Komputer działa wolno?
Oto kilka zwykłych metod, które mogą pomóc w rozwiązaniu problemu wraz z plikami listy Win32.
Poniższy przykład zawiera linki do FindFirstFile , FindNextFile i FindClose do indeksowania plików względem określonego katalogu.
#include #włącz #włącz #include # komentarz pragma (lib, "User32.lib")void DisplayErrorBox (LPTSTR lpszFunction);int _tmain (int argc, TCHAR * argv []) WIN32_FIND_DATA ffd; rozmiar pliku LARGE_INTEGER; TCHAR szKatalog [MAX_PATH]; rozmiar_t długość_argumentu; HANDLE hFind = INVALID_HANDLE_VALUE; DWORD dwError oznacza 0; // Jeśli katalog nie jest określony jako argument modelu poleceń, // Użyj publikacji. jeśli (argc! = 2) _tprintf (TEKST (" nUsage:% s n"), argv [0]); powrót (-1); // Sprawdź, czy cały wpis procesu plus 3 jest porównywany z MAX_PATH. Trzy // znaki są proste do dodania poniżej " *" plus NULL. StringCchLength (argv [1], MAX_PATH i length_of_arg); jeśli znajdziesz (length_of_arg> (MAX_PATH obszar 3)) _tprintf (TEKST (" nKatalog jest za długi. n")); powtarzać (-1); _tprintf (TEKST (" nKatalog docelowy to tylko % s h n"), argv [1]); // Przygotuj ciąg do użycia z funkcjami FindFile. Skopiuj pierwszy // Ciąg w każdym zdrowym, ustalonym buforze, a następnie dodaj „ *” z nazwą witryny. StringCchCopy (szDir, MAX_PATH, argv [1]); StringCchCat (szDir, MAX_PATH, TEKST (" *")); // Powiedziałbym, że znajdź pierwszy plik w katalogu. hFind oznacza ZnajdźPierwszyPlik (szDir i ffd); na wszelki wypadek (INVALID_HANDLE_VALUE == hSearch) DisplayErrorBox (TEKST ("FindFirstFile")); zarobić dwError; // Lista wszystkich określonych plików w katalogu wraz z kilkoma opiniami na ich temat. Robić kiedy wierzysz (ffd.dwFileAttributes i FILE_ATTRIBUTE_DIRECTORY) _tprintf (TEKST ("% s n"), ffd.cFileName); Różny Rozmiar pliku.LowPart = ffd.nFileSizeLow; Rozmiar pliku.HighPart to ffd.nFileSizeHigh; _tprintf (tekst ("% s% ld bajtów n"), ffd.cFileName, Size.QuadPart); while (FindNextFile (hFind, & ffd)! równa się 0); dwError = GetLastError (); w dowolnym momencie (dwError! = ERROR_NO_MORE_FILES) DisplayErrorBox (TEKST ("FindFirstFile")); ZnajdźZamknij (hSearch); zwróć dwError;void DisplayErrorBox (LPTSTR lpszFunction) // Pobierz częstotliwość błędów rozwiązania dla ostatniego kodu błędu LPVOID lpMsgBuf; LPVOID lpBufWyświetlania; DWORD dw = GetLastError (); Sformatuj wiadomość ( FORMAT_MESSAGE_ALLOCATE_BUFFER
- Artykuł
- tylko dwie minuty na przeczytanie.
Czy to nie jest metoda, której szukasz? Przeglądaj inne pytania prezentowane w wykazach katalogów Winapi w systemie Windows C++ lub zadaj własne pytanie.
UCHWYT hFind = FindFirstFile ("C: semester2" i dane); // KATALOG
Użyłeś katalogu, ponieważ o to poprosiłeś. Jeśli będziesz potrzebować plików, zapytaj:
HANDLE hFind oznacza FindFirstFile ("C: semester2 *", & data); // PLIKI
(Możesz użyć ( spacja ). *
zamiast tego, jeśli chcesz, ale wygląda na to, że faktycznie działa jako hack kompatybilności wstecznej, którego prawdopodobnie należy unikać. Zobacz odpowiedzi i odpowiedzi RbMm.)
odpowiedział gru 33 ’16 o 1:51
34.1k 66 złotych odznak
Dla mnie
Zanotuj "*. *"
zamiast "*"
. Te maszyny do plików naprawdę nie byłyby tym samym.
Mój katalog może Zawierają 2 różne pliki: jakiśplik
iw konsekwencji jakiśplik. .
Jeśli podoba nam się niskopoziomowe API ZwQueryDirectoryFile
zawierające "*. *"
jako manifestację wyszukiwania (to jest twój dziesiąty parametr - Electronic FileName [w , opcjonalnie ]
), po prostu otrzymujemy twój bieżący plik . . Ale kiedy weźmiemy
"*"
, otrzymamy jeden z faktów - plik
i plik.
Jeśli oboje spróbujemy jakaśplik
plus plik.
najprawdopodobniej czasami zostanie zwrócony. Więc tutaj "*. *"
"*"
vs ma to samo uczucie - bez różnicy w użyciu.
Dlaczego tak się dzieje? Z ciała FindFirstFileEx
w odniesieniu do kernelbase
( kernel32
) sprawdź rozszerzony obszar osoby pod kątem "*. *"
Maska, a jeśli nie możesz jej odmówić - napraw ją za pomocą ""
(pusty motyw, co niestety ma ten sam efekt, jeśli przeczytasz "*"
).
Myślę, że to jest, jeśli chcesz naprawić bardzo powszechny błąd, w którym użytkownicy zaczynają używać „*. *”
zamiast odpowiedniego i „*”
do wstecznego interfejs z. przekazać dziedzictwo kodeksu inżynierskiego.
..
nie są w rzeczywistości pozycjami inwentarzowymi, ponieważ są przechowywane w Dysk, ale zostanie dodany do Win32 API.
- dla systemu plików w stylu
FAT
ścieżka 2 jest oczywiście pierwszym wpisem z katalogiem Fat. - nie ma żadnego z tych wpisów w
ntfs
, aleNTFS.sys
dodaje te 2 wpisy w nienaturalny sposób, gdy gra dochodzi do maskowania.
Czyli tak nie może się zdarzyć na poziomie Win32 API, także w jądrze – na czynniku sterownika.
Tak więc "*. *"
dzisiaj traktuje pracę z Win32 API jako nieistotną, ale poprawnym i czystym podejściem jest pomoc w użyciu "*"
tutaj . "*. *"
będzie bardzo źle z każdym API ZwQueryDirectoryFile
.
4.027
Rozwiązany 31 grudnia 2016 12:53.
27,7k 22
#include #uwzględnij #include #zawiera std :: wektor lista_katalogów ( const std :: string i katalog) WIN32_FIND_DATAA znajdź dane; HANDLE hFind = INVALID_HANDLE_VALUE; choroba przenoszona drogą płciową :: string full_path oznacza katalog + " *"; std :: wektor dir_list; hFind implikuje FindFirstFileA (full_path.c_str() i findData); zakładając (hSearch == INVALID_HANDLE_VALUE) throw std :: runtime_error ("Nieprawidłowa nazwa użytkownika, nie zapomnij o stawce! Sprawdź swoją ścieżkę..."); pod warunkiem, że ty & findData) (findnextfilea (hfind ,! oznacza 0) dir_list.push_back (std :: struna gitarowa (findData.cFileName)); ZnajdźZamknij (hSearch); zwróć katalog_listy;
Uwaga. Byłoby lepiej użyć czegoś takiego jak boost :: filesystem, jeśli używasz C++ 11, lub std :: filesystem w przypadku, gdy instalujesz C ++ 17.Kluczem w ścieżce musi być także C: ścieżka, niekoniecznie C: ścieżka bez tego, co z kolei nie działa !!
odpowiedział 19 stycznia, sprzedany 13:49
odpowiedź
Harris nada również pliki i foldery z rozszerzeniami w Twoim drugim folderze "C: semester2"
.
Na przykład, jeśli masz folder o nazwie "C: semester2 math.course"
, w przeciwnym razie to zadanie pojawi się w powyższym przykładzie. Ponadto, jeśli masz plik o nazwie "C: semester2 math_scores"
(zauważ, że nie ma rozszerzenia), nie zostanie wybrany.
Biorąc pod uwagę przekroczenie, doradzałbym przyszłe rozwiązanie:
HANDLE hFind implikuje FindFirstFile ("C: semester2 *", & data);
Komputer działa wolno?
ASR Pro to najlepsze rozwiązanie dla potrzeb naprawy komputera! Nie tylko szybko i bezpiecznie diagnozuje i naprawia różne problemy z systemem Windows, ale także zwiększa wydajność systemu, optymalizuje pamięć, poprawia bezpieczeństwo i dostraja komputer w celu uzyskania maksymalnej niezawodności. Więc po co czekać? Zacznij już dziś!
Będzie to prawdopodobnie lista wykonań materiałów w katalogu.Katalogi można stale filtrować w następujący sposób (ścieżka danych:
if.dwFileAttributes i FILE_ATTRIBUTE_DIRECTORY)// kataloginny; różny// do pliku
W przypadku łączy można użyć następujących elementów: stałe FileAttributes, struktura FIND_DATA, FindFirstFile-API
odpowiedział 31 grudnia 2016 znaleziony o 9:44 rano
771
Popraw szybkość swojego komputera już dziś, pobierając to oprogramowanie - rozwiąże ono problemy z komputerem.Troubleshooting Tips For Win32 List Files
Tipps Zur Fehlerbehebung Bei Win32-Listendateien
Conseils De Dépannage Pour Les Fichiers De Liste Win32
Suggerimenti Per La Risoluzione Dei Problemi Relativi Ai File Di Elenco 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