Existem armadilhas para sistemas operacionais específicos, eu deveria saber?
Existem muitas duplicatas ( 1 , 2 , 3 , 4 , 5 ) desta pergunta, mas elas foram respondidas há décadas. As respostas com votos elevados em muitas dessas questões estão erradas hoje.
Métodos de outros (antigos QAs) em .sx
stat.h (wrapper sprintstatf ), usa syscall
tellg () , retorna por definição uma posição, mas não necessariamente bytes . O tipo de retorno não é
int
.
c++
c++17
filesize
c++-standard-library
Jonas Stein
fonte
fonte
tellg
problemas semelhantes . O único com o qual vale a pena se preocupar é o quarto, e esse não é grande, já que fala demaisofstream
, tanto na pergunta quanto nas respostas. Este é muito melhor em expressar a intenção do que os outros (exceto para o primeiro, que é estranhamente fechado).stat(2)
? Ficou muito velho ou o quê?stat(2)
Não faz parte do padrão de linguagem.Respostas:
<filesystem>
(adicionado em C ++ 17) torna isso muito simples .Conforme observado nos comentários, se você planeja usar esta função para decidir quantos bytes ler do arquivo, lembre-se de que ...
fonte
std::uintmax_t
será capaz de manter valores maiores do questd::size_t
? Se não, por que não usarstd::size_t
, que provavelmente é mais reconhecível? +1 na resposta,file_size
retorna. Parece um pouco estranho para mim também.std::size_t
só é necessário para manter o tamanho máximo de objetos na memória. Os arquivos podem ser consideravelmente maiores,size_t
é de 32 bits euintmax_t
64 bits.C ++ 17 traz o
std::filesystem
que agiliza muitas tarefas em arquivos e diretórios. Não apenas você pode obter rapidamente o tamanho do arquivo e seus atributos, mas também criar novos diretórios, iterar por meio de arquivos e trabalhar com objetos de caminho.A nova biblioteca nos oferece duas funções que podemos usar:
A primeira função é uma função livre em
std::filesystem
, a segunda é um método emdirectory_entry
.Cada método também tem uma sobrecarga, pois pode lançar uma exceção ou retornar um código de erro (por meio de um parâmetro de saída). Abaixo está o código detalhado explicando todos os casos possíveis.
fonte