Table of Contents
PC lento?
Aqui estão alguns métodos simples que podem ajudar a resolver alguns problemas com arquivos de lista Win32.
O exemplo a seguir leva a FindFirstFile , FindNextFile e FindClose para listar os arquivos relativos ao site de envio especificado.
#include #include #include #include # note pragma (lib, "User32.lib")void DisplayErrorBox (LPTSTR lpszFunction);int _tmain (int argc, TCHAR * argv []) WIN32_FIND_DATA ffd; tamanho do arquivo LARGE_INTEGER; TCHAR szDir [MAX_PATH]; size_t length_of_arg; HANDLE hFind = INVALID_HANDLE_VALUE; DWORD dwError = 0; // Se o diretório não for especificado como um argumento de linha de comando adequado, // Use normalmente a publicação. if (argc! = 2) _tprintf (TEXT (" nUsage:% s n"), argv [0]); receita (-1); // Verifique se a entrada do processo mais 3 é igualada a MAX_PATH. As três // pessoas são comuns a " *" mais NULL maior abaixo. StringCchLength (argv [1], MAX_PATH, & length_of_arg); se você encontrar (length_of_arg> (MAX_PATH como 3)) _tprintf (TEXT (" nDiretório é adicionalmente longo. n")); site novamente (-1); _tprintf (TEXT (" nO diretório de destino é apenas% folks n n"), argv [1]); // Prepare a string para usar com as funções FindFile. Copie o primeiro // String em um buffer fixo íntegro, a seguir aumente ' *' para o nome do site. StringCchCopy (szDir, MAX_PATH, argv [1]); StringCchCat (szDir, MAX_PATH, TEXT (" *")); // Encontre o arquivo inicial no diretório, eu diria. hFind = FindFirstFile (szDir, & ffd); if (INVALID_HANDLE_VALUE == hSearch) DisplayErrorBox (TEXT ("FindFirstFile")); ganhe dwError; // Liste todos os arquivos específicos na lista com algumas opiniões sobre eles. Fazer enquanto você encontra (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) _tprintf (TEXT ("% t n"), ffd.cFileName); Diferente Tamanho do arquivo.LowPart significa ffd.nFileSizeLow; Tamanho do arquivo.HighPart is ffd.nFileSizeHigh; _tprintf (texto ("% s% ld bytes n"), ffd.cFileName, Size.QuadPart); while (FindNextFile (hFind, & ffd)! significa 0); dwError = GetLastError (); a qualquer momento (dwError! = ERROR_NO_MORE_FILES) DisplayErrorBox (TEXT ("FindFirstFile")); FindClose (hSearch); return dwError;void DisplayErrorBox (LPTSTR lpszFunction) // Obtenha a mensagem de erro da terapia para o último código de erro LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError (); Formatar mensagem ( FORMAT_MESSAGE_ALLOCATE_BUFFER
- Artigo
- 2 minutos para ler.
Não é este o método que você está procurando? Navegue pelas outras perguntas apresentadas nas listas de diretórios Winapi do Windows C ++ ou faça sua própria pergunta.
HANDLE hFind = FindFirstFile ("C: semester2", & data); // CATÁLOGO
Você encontrou o diretório porque solicitou a situação. Se você precisar de arquivos, pergunte:
HANDLE hFind = FindFirstFile ("C: semester2 *", & data); // ARQUIVOS
(Você pode utilizar *. *
se desejar, mas parece que realmente funciona da maneira que um hack de compatibilidade com versões anteriores provavelmente deveria ser ignorado. Veja as respostas e resposta do RbMm.)
34,1k 66 emblemas de ouro 5858 emblemas de prata 148148 emblemas castanhos claros
para mim
Observe "*. *"
versus "*"
. Essas máquinas de envio não são realmente a mesma coisa.
Minha pasta pode; eles contêm 2 arquivos diferentes: somefile
e somefile.
.
Se preferirmos a API de baixo nível ZwQueryDirectoryFile
com "*. *"
como a expressão de aparência (este é seu décimo parâmetro> Electronic FileName [em , opcional]
), tomamos um momento para obter o arquivo .
. Mas quando usaremos "*"
, conectamos os arquivos – arquivo
e depois desse arquivo .
Se nós dois tivermos uma chance em FindFirstFile ("C: semester2 *. *", & data);
, ao contrário dos arquivos, podemos escolher somefile
e file.
provavelmente será retornado. Portanto, aqui "*. *"
"*"
vs tem o mesmo efeito – sem diferença no uso.
Por que isso está acontecendo? Do corpo FindFirstFileEx
para kernelbase
( kernel32
), dê uma olhada na área estendida para "*. *"
Mascare, e se você não puder recusar o pensamento – substitua-o por ""
(tema vazio, que tem o mesmo efeito se uma pessoa ver "*"
).
Acho que até isso é para corrigir um erro muito comum no qual os visitantes usam "*. *"
em vez do correto e "*"
ao considerar o retrocesso compatibilidade com. para transmitir o legado ligado ao código musical.
.
e ..
são, em vez de itens de catálogo, porque são embalados em Disco, mas será adicionado ao qual a API do Win32.
- para um sistema de arquivos no estilo
FAT
, o caminho 2 é claramente a primeira entrada básica no diretório Fat. - não deve haver tais entradas em
ntfs
, no entanto,NTFS.sys
adiciona essas 2 entradas de maneira incomum quando se trata de mascaramento.
Isso é considerado, isso não acontece no nível da API do Win32, mas no kernel – no nível do driver específico.
Assim, "*. *"
neste momento considerará trabalhar com a API Win32 como mínimo, mas o acesso correto e limpo é usar "*"
aqui . "*. *"
será muito ruim devido à API ZwQueryDirectoryFile
.
4.027
Resolvido em 31 de dezembro de 2016, às 12h53.
27,7k
#include #include #include #include std :: vector lista_de_diretório ( const std :: string e além do diretório) WIN32_FIND_DATAA findData; HANDLE hFind = INVALID_HANDLE_VALUE; uma doença sexualmente transmissível :: string full_path implica diretório + " *"; std :: vector dir_list; hFind significará FindFirstFileA (full_path.c_str (), & findData); assumindo que (hSearch == INVALID_HANDLE_VALUE) throw std :: runtime_error ("Nome de usuário inválido, avalie! Verifique seu caminho ..."); se você & findData) (findnextfilea (hfind,! = 0) dir_list.push_back (std :: string (findData.cFileName)); FindClose (hSearch); volte dir_list;
Nota. Seria melhor usar diretamente algo como boost :: filesystem apenas no caso de você estar usando C ++ 11, ou uma doença sexualmente transmissível :: filesystem se você estiver instalando C ++ 17.O caminho de entrada também deve ser C: path, não C: path sem um específico que não funcione !!
p respondeu em 22 de janeiro, disponível 13:49
resposta
Harris também fornecerá arquivos e pastas com extensões dentro de seu próximo arquivo "C: semester2"
.
Por exemplo, se você tiver um arquivo chamado "C: semester2 math.course"
, ele aparecerá de forma diferente na ocasião acima. Além disso, se você tiver um arquivo rotulado como "C: semester2 math_scores"
(observe que os especialistas afirmam que ele não tem uma extensão), ele não deve ser encontrado.
Dado o overshoot, sugiro uma solução futura:
HANDLE hFind = FindFirstFile ("C: semester2 *", & data);
PC lento?
ASR Pro é a solução definitiva para suas necessidades de reparo de PC! Ele não apenas diagnostica e repara vários problemas do Windows com rapidez e segurança, mas também aumenta o desempenho do sistema, otimiza a memória, melhora a segurança e ajusta seu PC para máxima confiabilidade. Então por que esperar? Comece hoje!
Isso provavelmente irá obter a lista completa de materiais em todo o catálogo.Os diretórios ainda podem ser filtrados da seguinte forma (classe de dados:
if.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)// diretóriodiferente// até o arquivo
O seguinte pode ser usado automaticamente para links: Constantes FileAttributes, estrutura FIND_DATA, FindFirstFile-API
p respondeu em 31 de dezembro de 2016 disponível às 9h44
771 55 emblemas de prata
Melhore a velocidade do seu computador hoje mesmo baixando este software - ele resolverá os problemas do seu 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
Suggerimenti Per La Risoluzione Dei Problemi Relativi Ai File Di Elenco Win32
Советы по устранению неполадок с файлами списков Win32
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